OAuth教程--OAuth 2.0规范

Author Avatar
Sean Yu 7月 14, 2018
  • 在其它设备中阅读本文章

本文是oauth.com上的教程的翻译。(原文地址

OAuth 2.0核心框架(RFC 6749)定义了角色和基本功能级别,但未指定大量实现细节。自RFC发布以来,OAuth工作组已经发布了许多基于此框架构建的其他规范,以填补缺失的部分。查看该小组正在进行的完整规范列表可能有点困难。本章列出了各种规范如何相互关联。

核心规格

OAuth 2.0核心(RFC 6749)

https://tools.ietf.org/html/rfc6749

RFC 6749是核心OAuth 2.0框架。这描述了角色(资源所有者,客户端,授权服务器等,在术语参考中有更详细的描述,几个授权流程和几个错误定义。重要的是要记住这是一个“框架”,因为有很多方面未指明您在构建完整实施时需要填写。其中大部分细节已记录为扩展规范。

承载令牌使用(RFC 6750)

https://tools.ietf.org/html/rfc6750

核心规范没有定义访问令牌的格式或如何使用它们。在开发核心规范的早期,访问令牌是争论的主要问题,结果是访问令牌完全取自核心规范,而不是让人们在不受欢迎的令牌上妥协。但是,从那时起,大多数实现已经标准化使用承载令牌。RFC 6750描述了使用承载令牌访问API的语法和方法。

威胁模型和安全注意事项(RFC 6819)

https://tools.ietf.org/html/rfc6819

编写威胁模型和安全注意事项文档是为了提供超出核心文档所述内容的其他指导。在主要提供商具有真正的实施经验之后,添加了大部分文档。该文件描述了许多已知的攻击,无论是理论攻击还是已经被证明的攻击。它描述了每种方法的对策。

实施OAuth 2.0服务器的每个人都应该阅读本文档,以避免陷入已经探索和解决过的陷阱。

令牌

令牌自解析(RFC 7662)

https://tools.ietf.org/html/rfc7662

令牌自解析规范定义了资源服务器获取有关访问令牌的信息的机制。如果没有此规范,资源服务器必须有一种定制方式来检查访问令牌是否有效,并找出有关它们的用户数据等。这通常发生在自定义API endpoint上,或者因为资源服务器和授权服务器共享一个数据库或其他一些常见的存储。

使用此规范,资源服务器可以检查访问令牌的有效性,并通过HTTP API调用查找其他信息,从而更好地分离授权服务器与任何资源服务器之间的关注点。

令牌绑定

https://tools.ietf.org/html/draft-ietf-oauth-token-binding

令牌绑定扩展描述了一种将令牌加密绑定到客户端的技术,以保护令牌免受中间人和重放攻击。标准承载令牌和授权码与使用它们的客户端没有加密连接,这是OAuth 1中OAuth 2的重大变化。

移动和其他设备

编写这些规范是为了在更广泛的设备上支持OAuth。

适用于原生应用的OAuth 2.0

https://tools.ietf.org/html/draft-ietf-oauth-native-apps

本文档更多的是一组准则而不是协议更改。在本文档中,您将找到针对这些环境特有的原生应用程序和安全建议的建议。它描述了诸如不允许第三方应用程序打开更容易受到网络钓鱼攻击的嵌入式Web视图以及有关如何执行此操作的特定于平台的建议。它还建议使用PKCE扩展,如下所述。

PKCE:代码交换的证明密钥(RFC 7636)

https://tools.ietf.org/html/rfc7636

移动和桌面应用等公共客户端缺少使授权流程安全的Web应用程序的许多功能。Web应用程序具有使用HTTPS URL访问的好处,因此授权服务器可以合理地确信它在生成授权代码后,将用户的浏览器重定向到正确的应用程序。在用授权码交换访问令牌时,Web应用程序还能够利用客户端秘钥。由于移动和桌面应用程序都没有这些功能,因此授权服务器无法确定它是否将用户返回到正确的应用程序。

PKCE扩展描述了应用程序首先生成在请求访问令牌时使用秘钥的方式,以便拦截授权代码的攻击者无法使用被盗代码。

PKCE中详细介绍了PKCE扩展。

设备流程

https://tools.ietf.org/html/draft-ietf-oauth-device-flow

设备流是一种扩展,它使没有浏览器或有限输入功能的设备能够获得用户授权。您通常会在没有网络浏览器的Apple TV等设备上看到这种情况,或者除了几个按钮之外没有输入机制的流式视频编码器。

该流程的工作原理是让用户访问辅助设备(如智能手机)上的URL并输入设备上显示的代码。

身份验证和会话管理

这些规范用于促进身份验证和会话管理,这两者都不是核心OAuth规范的一部分。

OpenID Connect

https://openid.net/connect/

由于OAuth框架仅描述授权方法,并且未提供有关用户的任何详细信息,因此OpenID Connect通过描述身份验证和会话管理机制来填补这一空白。

IndieAuth

https://www.w3.org/TR/indieauth/

IndieAuth是一个基于OAuth 2.0构建的分散式身份协议,使用URL来识别用户和应用程序。这样就无需事先注册客户端,因为所有客户端都有内置的客户端ID:应用程序的URL。

令牌撤销(RFC 7009)

https://tools.ietf.org/html/rfc7009

本文档描述了授权服务器的新endpoint,客户端可以使用该endpoint通知服务器不再需要访问令牌或刷新令牌。这用于在客户端中启用“注销”功能,允许授权服务器清除与该会话关联的任何凭据。

交互操作

为了支持创建可以与任何OAuth 2.0服务器一起使用的完全通用的客户端,需要对发现和客户端注册等内容进行标准化,因为它们超出了核心规范的范围。

授权服务器元数据

https://tools.ietf.org/html/rfc8414

授权服务器元数据规范(也称为发现)定义了客户端用于查找与特定OAuth服务器交互所需的信息的格式。这包括查找授权endpoint和列出支持的范围等内容。

动态客户端注册(RFC 7591)

https://tools.ietf.org/html/rfc7591

通常,开发人员将手动在服务中注册应用程序以获取客户端ID,并提供有关将在授权接口上使用的应用程序的信息。此规范提供了动态或以编程方式注册客户端的机制。此规范源自OpenID Connect动态客户端注册规范,并且仍与OpenID Connect服务器兼容。

动态客户端管理(RFC 7592)

https://tools.ietf.org/html/rfc7592

在需要更新客户端信息的情况下,此规范提供了以编程方式执行此操作的机制。此规范扩展了动态注册RFC 7591。

企业

这些规范支持更高级的企业用例。

断言框架(RFC 7521)

https://tools.ietf.org/html/rfc7521

此规范提供了使用OAuth 2.0断言的框架。它定义了新的客户端身份验证机制和新的授权授予类型。由于此规范也是一个框架,因此它仅适用于下面描述的特定断言类型之一。

JWT断言(RFC 7523)

https://tools.ietf.org/html/rfc7523

此规范描述了当JWT的内容与客户端存在信任关系时,如何使用JWT来请求访问令牌。它还描述了如何将JWT用作核心OAuth授权的客户端身份验证。

SAML断言(RFC 7522)

https://tools.ietf.org/html/rfc7522

此规范描述了当与客户端存在信任关系时,如何使用SAML断言来请求访问令牌。例如,这可用于将旧版SAML工作流与新的OAuth 2.0系统集成。