软件授权注册码_授权码授予

本文详细介绍了OAuth 2.0授权码授权类型的流程,包括授权码请求、响应、访问令牌请求及响应。通过示例代码展示了如何在Java中实现OAuth 2.0客户端,包括如何获取和刷新访问令牌,以及如何访问受保护资源。文中还提到了如何在Salesforce和Google等平台上测试和注册OAuth 2.0客户端。
摘要由CSDN通过智能技术生成

软件授权注册码

OAuth是一种开放的授权标准,可让客户端代表资源所有者访问受保护的服务器资源。 资源所有者可以是其他客户端或最终用户。 OAuth还可以帮助最终用户授权第三方访问其服务器资源,而无需共享其凭据(例如用户名和密码)。 本系列文章遵循RFC6749中概述的OAuth 2.0授权框架。 可以在Internet工程任务组网站上找到RFC 6749中概述的完整OAuth 2.0授权框架。

授权补助

授权授予是一个凭证,代表可用于访问受保护资源的资源所有者的授权。 客户端使用此凭据来获取访问令牌,并且最终将该访问令牌与访问受保护资源的请求一起发送。 OAuth 2.0定义了四种授权类型:

  1. 授权码
  2. 隐含的
  3. 资源所有者密码凭证
  4. 客户凭证

本系列文章将指导您使用上面列出的每种授予类型,在Java™编程中实现OAuth 2.0客户端。 在第三部分中,我将解释如何实现授权码授予。 本文将详细说明该赠款,并说明可用于与支持此赠款的任何OAuth 2.0兼容服务器进行交互的示例客户端代码。 到本文结尾,您应该对客户端实现有完整的了解,并准备下载示例客户端代码以进行自己的测试。

授权码授予

该授权针对机密客户端进行了优化,用于获取访问令牌和刷新令牌。 这是基于重定向的流程,因此,客户端必须能够与资源所有者的用户代理(通常是Web浏览器)进行交互,并且还必须能够(通过重定向)接受来自授权服务器的传入请求。

授权代码授予如图1所示。

图1.授权代码流程
流程图显示授权码流程

图1所示的流程包括以下步骤:

  • (A)客户端(通常是Web应用程序)通过将资源所有者的用户代理(通常是Web浏览器)定向到授权端点来启动流程。 客户端的请求包括客户端标识符,请求的范围,本地状态和重定向URI。 授权访问(或拒绝访问)后,授权服务器将用户代理(通常是Web浏览器)定向回重定向URI。
  • (B)资源所有者通过用户代理向授权服务器进行身份验证,并授予或拒绝客户端的访问请求。
  • (C)如果资源所有者授予访问权限,则授权服务器使用之前(在请求中或在客户端注册期间)提供的重定向URI将用户代理(通常是Web浏览器)重定向回客户端。 重定向URI包括授权码和客户端之前提供的任何本地状态。
  • (D)客户端通过包括上一步中收到的授权代码,从授权服务器的令牌端点发出访问令牌请求。 发出请求时,客户端使用客户端凭据向授权服务器进行身份验证。 客户端还包括用于获得授权码以进行验证的重定向URI。
  • (E)授权服务器对客户端进行身份验证。 它验证授权码,并确保接收到的重定向URI与步骤(C)中用于重定向客户端的URI匹配。 如果有效,授权服务器将以访问令牌和(可选)刷新令牌进行响应,以防请求离线访问。

授权码请求

授权代码请求对应于图1中描述的步骤(A)和(B)。在步骤(A)中,客户端以application/x-www-form-urlencoded格式向授权服务器发出请求。在清单1中。

清单1.授权代码请求的示例
GET /authorize?response_type=code&client_id=s6BhdRkqt3&state=xyz
&redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb HTTP/1.1
Host: server.example.com

该请求必须包含以下参数:

  • response_type :必需。 该值必须设置为code
  • client_id :必填。 客户端ID。
  • redirect_uri :必需。 用于用户代理重定向。
  • scope :可选。 访问请求的范围。
  • state :可选。 维持请求和回调之间的状态。

在授权服务器验证了请求之后,服务器将HTTP重定向代码302响应发送回客户端。 该响应还将在http Location标头中包含重定向URI。 在步骤(B)中,客户端必须将用户代理(通常是Web浏览器)重定向到此URI。 此重定向URI通常是一个登录页面,资源所有者可以在其中使用其凭据登录并授予/撤消对客户端请求的访问权限。

授权码回应

授权代码响应如图1的步骤(C)所示。如果资源所有者批准了访问请求,则授权服务器将发布授权代码。 授权服务器将用户代理重定向到步骤(A)中作为请求的一部分提供的重定向URI,并使用application/x-www-form-urlencoded将授权代码包括为重定向URI的查询组件的一部分。格式。

URI参数如下:

  • Code :必填。 授权服务器生成的授权代码。 该代码是临时代码,必须在生成后立即过期。 客户端不得多次使用授权码。 授权服务器应撤消使用相同代码的其他任何请求。 授权代码绑定到客户端标识符和重定向URI。
  • State :必填。 如果客户端的授权代码请求中存在state参数,则必须将此参数设置为从客户端收到的确切值。

访问令牌请求

这对应于图1中的步骤(D)。客户端使用application/x-www-form-urlencoded格式向令牌端点(授权服务器)发出请求,如清单2所示。

清单2.访问令牌请求的示例
POST /token HTTP/1.1
Host: server.example.com
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
Content-Type: application/x-www-form-urlencoded

             grant_type=authorization_code&code=SplxlOBeZQQYbYS6WxSbIA
             &redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom&client_id=c342

访问令牌请求必须设置以下参数:

  • grant_type :必需。 该值必须设置为authorization_code
  • client_id :必填。 客户端ID。
  • client_secret :可选。 秘密。 与授权服务器进行身份验证。
  • code :必填。 从服务器收到的授权码。
  • redirect_uri :必需。 与步骤(A)中发送的相同。

授权服务器验证代码和重定向URI是否有效。 对于机密客户端,授权服务器还使用在请求正文或授权标头中传递的客户端凭据对客户端进行身份验证。

访问令牌响应

这对应于图1中的步骤(E)。如果访问令牌请求有效且被授权,则授权服务器在访问令牌响应中返回访问令牌。 清单3显示了成功响应的示例。

清单3.成功的访问令牌响应的示例
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache

{
  "access_token":"2YotnFZFEjr1zCsicMWpAA",
  "token_type":"Bearer",
  "expires_in":3600,
  "refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA",
  "example_parameter":"example_value"
}

如果请求无效或未授权,则授权服务器返回带有代码的适当错误消息。

刷新访问令牌请求

这是一个可选步骤,如果客户端请求脱机访问并作为访问令牌请求的一部分提供了refresh_token ,则此步骤适用。 访问令牌是临时的,通常在一个小时后过期。 访问令牌过期后,客户端将需要重复身份验证过程,而资源所有者将需要登录并提供授权,以使客户端能够再次提出访问令牌请求。

如果客户端需要刷新访问令牌,而浏览器中不存在资源所有者登录并进行身份验证,则客户端将使用脱机访问。 客户端可以在发出第一个授权码请求时请求脱机访问(请参阅步骤(A))。 在这种方案下,授权服务器除访问令牌外还返回刷新令牌。 刷新令牌是一个长期有效的令牌,除非资源所有者明确将其吊销,否则它不会过期。 每次访问令牌到期时,客户端都可以使用刷新令牌重新生成访问令牌,而资源所有者无需登录并授权访问请求。

客户端使用application/x-www-form-urlencoded格式向令牌端点(授权服务器)发出请求,如清单4所示:

清单4.对令牌端点的请求
POST /token HTTP/1.1
Host: server.example.com
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
Content-Type: application/x-www-form-urlencoded

grant_type=refresh_token&refresh_token=tGzv3JOkF0XG5Qx2TlKWIA

请求参数定义如下:

  • grant_type :必需。 该值必须设置为refresh_token
  • refresh_token :必需。 这是从访问令牌请求中较早检索到的。
  • scope :可选。 访问请求的范围。

授权服务器验证刷新令牌并颁发新的访问令牌。

刷新访问令牌响应

如果请求成功,授权服务器将返回一个新的访问令牌。 清单5显示了成功响应的示例。

清单5.刷新访问令牌响应
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache

{
  "access_token":"2YotnFZFEjr1zCsicMWpAA",
  "token_type":"Bearer",
  "expires_in":3600,
  "example_parameter":"example_value"
}

如果请求无效或未授权,则授权服务器返回带有代码的适当错误消息。

建立

示例Outh2.0客户端是一个动态Web项目。 您可以从Downloads下载<

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值