第1课:授权码流(理论)

1.目标

在本课中我们将分析一个非常受欢迎的OAuth2授予​​类型流,授权码流。


2.课程票据

我们只关注了解流程的执行方式,此时没有代码。因此,无需从我们的代码存储库中结账。


2.1。授权码流动仪

让我们从流程中交互的高级演员开始:

资源所有者将是我们应用程序的最终用户。其作用是明确授予对客户的访问权限的受保护资源。

Now, there are many types of clients, but, for the purpose of our discussion here, we’re going to consider a traditional MVC application with a server-side component as well as a client-side component executed by a user-agent - the browser in our case.

授权码流涉及与用户的重定向和交互,因为我们将看到下一步。


2.2。授权码流程步骤

第1步:授权端点

当客户端请求授权访问受保护资源时,流程开始。用户代理将被重定向到授权服务器的授权端点。

OAuth2规范表示以下参数可以包含在请求中:

Response_type.

与A.代码当我们使用授权码流时的值。

client_id.

表示以前在授权服务器中注册的客户端的标识符。

redirect_uri.

指向客户端应用程序中的端点的URI,能够处理授权响应。

通常需要注册有效的重定向URI的白名单。

范围

指示访问令牌将授予哪个“权限”,例如,读写访问权限。

支持的值由授权服务器定义。

可以通过将它们与WhiteSpace分离来指定多个值。

状态

这用于安全目的,以防止跨站点请求伪造(CSRF)攻击。

例如,对此端点的请求可能如下所示:

注意请求中没有涉及的客户凭据;客户端无法保证他们的保密性。


第2步:验证资源所有者

授权服务器对资源所有者进行身份验证并询问授予或拒绝客户所要求的权限


第3步:重定向URI

这种有趣的步骤是使得这一流程不同,更安全的是,而不是其他OAuth流程。

此时尚未发出访问令牌,因为正如我们所说,这一切都通过用户代理 - 浏览器 - 在客户端上,无法保证在此域中安全地处理。

相反,授权服务器返回中介代码,授权代码(因此流的名称)。

基本上,浏览器将重定向到客户端应用程序中的重定向URI。请记住,我们在流程开始时提供了该URI。

该呼叫包括授权代码作为查询参数。这是由授权服务器生成的代码,通常出于安全原因短暂,并且只能使用一次。

让我们看看这个URI如何看起来像:

当然,这是状态Param必须匹配授权请求中提供的那个,并且客户端应该执行此验证。

如果资源所有者拒绝访问,则响应包括错误信息而不是代码范围:

  • 错误:错误代码(拒绝访问无效的请求unauthorized_client.,......)
  • error_description.:有更多信息,以帮助理解发生的错误
  • ERROR_URI.:指向网页,其中包含有关错误的信息雷竞技app官网网站

第4步:访问令牌端点

客户端应用程序现在需要交换访问令牌的授权代码。这是通过向授权服务器的令牌端点发送带有一些特定参数的授权服务器的令牌端点来完成的:

格兰特_TYPE.

必须授权_Code.表示我们正在使用此流程

代码

在上一步中发出的临时代码

redirect_uri.

必须与先前发送的那个完全相同

此外,客户端必须使用授权服务器进行身份验证,通常通过提供客户端ID和客户机密。这些可以使用HTTP基本身份验证或请求主体发送:

请注意,与先前步骤不同,所有步骤都通过用户代理,这里请求由服务器端的客户端应用程序直接到授权服务器。

这就是为什么它可以被认为在此阶段处理客户端凭据,并将这些请求与授权码一起包含。


第5步:访问令牌响应

如果请求有效和授权,授权服务器最终发出访问令牌。在此响应中检索令牌及其有效期,以及其他相关领域:

步骤6:访问受保护的资源

现在最后客户端可以使用访问令牌请求安全的资源。

授权服务器包括有关如何在访问令牌响应中使用令牌的信息。

例如,如果token_type.响应的价值是持票人,然后通过简单地在请求标题中使用它来利用令牌。


2.3。刷新令牌支持

它还值得一提的是,在授权码流中,刷新令牌的用法是处理短期访问令牌的机制。

但我们将在未来的课程中分析这个主题。


3.资源

-IETF OAuth 2.0授权框架规范

-具有春季安全OAuth的前端应用程序 - 授权码流