原文出处: IBM - Varun Ojha概述OAuth 是一个开放的授权标准,允许客户端代表一个资源所有者获得访问受保护服务器资源的访问权。资源所有者可以是另一个客户端或最终用户。OAuth 还可以帮助最终用户将对其服务器资源的访问权限授权给第三方,而不必共享其凭据,比如 ...
原文出处: IBM - Varun Ojha
概述
OAuth 是一个开放的授权标准,允许客户端代表一个资源所有者获得访问受保护服务器资源的访问权。资源所有者可以是另一个客户端或最终用户。OAuth 还可以帮助最终用户将对其服务器资源的访问权限授权给第三方,而不必共享其凭据,比如用户名和密码。本系列文章遵循 RFC 6749 中所列出的 OAuth 2.0 授权框架。可以在 Internet Engineering Task Force 的网站上找到 RFC 6749 中列出的完整 OAuth 2.0 授权框架(请参阅 参考资料)。
授权批准
授权批准是一种凭据,可代表资源所有者用来访问受保护资源的权限。客户端使用此凭据获取访问令牌。访问令牌最终与请求一起发送,以便访问受保护资源。OAuth 2.0 定义了四种授权类型:
- 授权码
- 隐式
- 资源所有者密码凭据
- 客户端凭据
本文是由四部分组成的系列中的第 1 部分,将引导您使用上面列出的每种授权类型在 Java™ 编程中实现 OAuth 2.0 客户端。在第 1 部分中,我会告诉大家如何实现资源所有者密码凭据授权。本文详细介绍各种授权,并解释示例客户端代码,此代码可用于兼容 OAuth 2.0 的任何服务器接口,以支持此授权。在本文的最后,您应该对客户端实现有全面的了解,并准备好下载示例客户端代码,自己进行测试。
资源所有者密码凭据授权
当资源所有者对客户端有高度信任时,资源所有者密码凭据授权类型是可行的。此授权类型适合于能够获取资源所有者的用户名和密码的客户端。对于使用 HTTP 基础的现有企业客户端,或者想迁移到 OAuth 的摘要式身份验证,该授权最有用。然后,通过利用现有凭据来生成一个访问令牌,然后就可以实现迁移。
例如,Salesforce.com 添加了 OAuth 2.0 作为对其现有基础架构的一个授权机制。对于现有的客户端转变为这种授权方案,资源所有者密码凭据授权将是最方便的,因为他们只需使用现有的帐户详细信息(比如用户名和密码)来获取访问令牌。
图 1. 资源所有者密码凭据流
在 图 1 中所示的流程包括以下步骤:
- 资源所有者提供一个可信的 OAuth 2.0 客户端,并提供其用户名和密码。
- OAuth 2.0 客户端对授权服务器的令牌端点发出访问令牌请求,其中包括从资源所有者那里收到的凭据。在发出请求时,OAuth 2.0 客户端使用由授权服务器提供的凭据和授权服务器进行身份验证。
- 授权服务器对 OAuth 2.0 客户端进行身份验证,并验证资源所有者凭据,如果该凭据是有效的,那么授权服务器会颁发一个访问令牌。
访问令牌请求
对应于第二个步骤的访问令牌请求如 图 1 所示。
客户端对令牌端点(授权服务器)发出请求,采用 application/x-www-form-urlencoded 格式发送以下参数。
grant_type
:必选项。必须将其值设置为 “password”username
:必选项。资源所有者的用户名。password
:必选项。资源所有者密码。scope
:可选项。访问请求的范围
如果客户端类型是机密的,或客户端获得了客户端凭据(或者被分配了其他身份验证要求),那么客户端必须向授权服务器进行身份验证。例如,客户端使用传输层安全性发出下列 HTTP 请求。
清单 1. 向授权服务器进行身份验证
访问令牌响应
对应于上述步骤 C 的访问令牌响应如 图 1 所示。如果访问令牌请求是有效的,并且获得了授权,那么授权服务器将返回访问令牌和一个可选的刷新令牌。清单 2 显示了一个成功响应的示例。
清单 2. 成功的访问令牌响应
原标题:Java 编程中的 OAuth 2.0 客户端,第 1 部分: 资源所有者密码凭据授权
关键词:JAVA
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。