1. beplay体育能用吗网络安全学院
  2. OAuth身份验证
  3. OAuth Grant类型

OAuth Grant类型

在本节中,我们将介绍两种最常见的OAuth赠款类型的基础。如果您是Oauth的新手,我们建议您在尝试完成我们的OAuth身份验证实验室。

什么是OAuth赠款类型?

OAuth赠款类型确定了OAuth过程中涉及的步骤的确切顺序。赠款类型还会影响客户端应用程序在每个阶段与OAUTH服务的通信方式,包括如何发送访问令牌本身。因此,赠款类型通常被称为“ Oauth流”。

在客户端应用程序启动相应的流之前,必须配置OAuth服务以支持特定的赠款类型。客户端应用程序指定要在其发送给OAUTH服务的初始授权请求中使用的授予类型。

有几种不同的赠款类型,每种都有不同级别的复杂性和安全性考虑。我们将重点关注“授权代码”和“隐性”赠款类型,因为这些授予类型是迄今为止最常见的。

Oauth范围

对于任何OAuth赠款类型,客户端应用程序必须指定其要访问的数据以及要执行的操作。它使用范围授权请求的参数已发送到OAuth服务。

对于基本的OAuth,客户端应用程序可以请求访问的范围是每个OAuth服务唯一的。由于示波器的名称只是一个任意文本字符串,因此在提供商之间的格式可以巨大变化。有些甚至使用完整的URI作为范围名称,类似于REST API端点。例如,当请求阅读访问用户的联系人列表时,范围名称可能取决于所使用的OAUTH服务以下任何表格:

范围=联系人范围= contacts.read scope = contact-list-r scope = https://oauth-authorization-server.com/auth/scopes/user/contacts.readonly

但是,当使用OAuth进行身份验证时,经常使用标准化的OpenID连接范围。例如,范围OpenID配置文件将授予客户端应用程序对用户的预定义基本信息集的访问,例如其电子邮件地址,用户名等。我们将更多地谈论OpenID Connect之后。

授权代码赠款类型

授权代码赠款类型最初看起来很复杂,但实际上比您熟悉一些基本知识要简单。

简而言之,客户端应用程序和OAUTH服务首先使用重定向来交换一系列基于浏览器的HTTP请求,以启动该流量。询问用户是否同意该请求的访问。如果他们接受,则将客户端应用程序授予“授权代码”。然后,客户端应用程序将此代码与OAuth服务交换以接收“访问令牌”,他们可以用来进行API调用以获取相关的用户数据。

从代码/代币交换开始进行的所有通信均通过安全,预先配置的后通道发送服务器到服务器,因此,最终用户是看不见的。当客户端应用程序首先注册OAUTH服务时,将建立此安全渠道。此时,client_secret也是生成的,在发送这些服务器到服务器请求时,客户端应用程序必须使用该应用程序来验证自身。

由于最敏感的数据(访问令牌和用户数据)不是通过浏览器发送的,因此该赠款类型可以说是最安全的。服务器端应用程序理想情况下应始终使用此赠款类型。

OAuth授权代码赠款类型的流程

1.授权请求

客户端应用程序向OAuth服务发送请求/授权端点要求访问特定用户数据的权限。请注意,端点映射可能会有所不同 - 我们的实验室使用端点/auth以此目的。但是,您应该始终能够根据请求中使用的参数识别端点。

get/authorization?client_id=12345&redirect_uri=https://client-app.com/callback&response_type = code = code&scope = pope = openid%20profile&state = ae13d489bd00e3c24 http/1.1

此请求包含以下值得注意的参数,通常在查询字符串中提供:

  • client_id

    强制性参数包含客户端应用程序的唯一标识符。当客户端应用程序注册OAuth服务时,将生成此值。

  • redirect_uri

    将授权代码发送到客户端应用程序时,应重定向用户浏览器的URI。这也称为“回调URI”或“回调端点”。许多OAUTH攻击基于在此参数验证中利用缺陷。

  • wendment_type

    确定客户端应用程序期望的响应类型,因此,它想要启动哪种响应。对于授权代码赠款类型,该值应为代码

  • 范围

    用于指定客户端应用程序要访问的用户数据的哪个子集。请注意,这些可能是由OAuth提供商设置的自定义范围,也可以是由OpenID Connect Specification定义的标准化范围。我们将掩盖OpenID Connect稍后再详细介绍。

  • 状态

    存储与客户端应用程序上当前会话相关的唯一,不可限制的值。OAuth服务应与授权代码一起返回响应中的此确切值。该参数用作CSRF令牌对于客户端应用程序,请确保请求向其请求/打回来端点来自发起OAuth流的同一人。

2.用户登录和同意

当授权服务器收到初始请求时,它将将用户重定向到登录页面,并将提示他们与OAuth提供商登录其帐户。例如,这通常是他们的社交媒体帐户。

然后,将向他们提供客户应用程序要访问的数据列表。这是基于授权请求中定义的范围。用户可以选择是否同意此访问权限。

重要的是要注意,一旦用户批准了客户端应用程序的给定范围,只要用户仍然与OAuth服务有有效的会话,此步骤将自动完成。换句话说,用户第一次选择“使用社交媒体登录”时,他们将需要手动登录并给予同意,但是如果以后将其重新访问客户端应用程序,他们通常可以用一个单击。

3.授权代码赠款

如果用户同意请求的访问,则将其浏览器重定向到/打回来redirect_uri授权请求的参数。所结果的得到请求将包含授权代码作为查询参数。根据配置,它也可以发送状态参数具有与授权请求相同的值。

get /callback?code = a1b2c3d4e5f6g7h8&state = ae13d489bd00ee3c24 http /1.1主机:client-app.com

4.访问令牌请求

客户端应用程序收到授权代码后,它需要将其换成访问令牌。为此,它发送服务器到服务器邮政请求OAuth服务/令牌端点。从这一点开始的所有通信都在安全的后渠道中进行,因此通常无法观察或控制攻击者。

POST /token HTTP/1.1 Host: oauth-authorization-server.com … client_id=12345&client_secret=SECRET&redirect_uri=https://client-app.com/callback&grant_type=authorization_code&code=a1b2c3d4e5f6g7h8

除了client_id和授权代码,您会注意到以下新参数:

  • client_secret

    客户端应用程序必须通过在OAuth服务注册时分配的秘密密钥来验证自身。

  • Grant_Type

    用于确保新端点知道客户应用程序要使用的赠款类型。在这种情况下,应将其设置为授权_code

5.访问令牌赠款

OAuth服务将验证访问令牌请求。如果所有内容都如预期的,服务器可以通过授予客户端应用程序为带有请求的范围的访问令牌做出响应。

{“ access_token”:“ z0y9x8w7v6u5”,“ token_type”:“ bearer”,“ expires_in”:3600,“ scope”:“ openID profile”,…}

6. API通话

现在,客户端应用程序具有访问代码,它最终可以从资源服务器中获取用户的数据。为此,它对OAuth服务的API呼叫/用户信息端点。访问令牌在授权:承载者标题证明客户端应用程序有权访问此数据。

get /userInfo http /1.1主机:oauth-resource-server.com授权:携带者z0y9x8w7v6u5

7.资源赠款

资源服务器应验证令牌是否有效,并且属于当前客户端应用程序。如果是这样,它将通过发送请求的资源,即基于访问令牌的范围来响应。

{“用户名”:“ Carlos”,“电子邮件”:“ carlos@carlos-montoya.net”,…}

客户端应用程序最终可以用于其预期目的。在OAuth身份验证的情况下,通常将其用作授予用户认证的会话并有效地记录它们的ID。

隐性赠款类型

隐式赠款类型要简单得多。客户端应用程序不是首先获得授权代码,然后将其交换为访问令牌,而是在用户给予同意后立即接收访问令牌。

您可能想知道为什么客户端应用程序并不总是使用隐式赠款类型。答案相对简单 - 它的安全性要差得多。当使用隐式赠款类型时,所有通信都会通过浏览器重定向进行 - 在授权代码流中没有安全的后通道。这意味着敏感的访问令牌和用户的数据更容易受到潜在攻击。

隐式赠款类型更适合单页应用程序和本机桌面应用程序,该应用程序无法轻易存储client_secret因此,在后端,使用“授权代码赠款”类型不会从中受益那么多。

OAuth隐式赠款类型的流程

1.授权请求

隐式流量与授权代码流的方式几乎相同。唯一的主要区别是wendment_type参数必须设置为令牌

get/authorization?client_id=12345&redirect_uri=https://client-app.com/callback&response_type = token&scope = openid%20profile&state = ae13d489bd00e3c24

2.用户登录和同意

用户登录并决定是否同意所请求的权限。此过程与授权代码流完全相同。

3.访问令牌赠款

如果用户同意对请求的访问权限,则情况开始有所不同。OAuth服务将将用户的浏览器重定向到redirect_uri在授权请求中指定。但是,它不会发送包含授权代码的查询参数,而是将访问令牌和其他特定于代币的数据作为URL片段发送。

get /callback#access_token = z0y9x8w7v6u5&token_type = bearer&expires_in = 5000&scope = openID%20profile&state = ae13d489bd00e3c24

由于访问令牌是在URL片段中发送的,因此它永远不会直接发送到客户端应用程序。相反,客户端应用程序必须使用合适的脚本来提取片段并将其存储。

4. API通话

一旦客户端应用程序成功从URL片段提取了访问令牌,它就可以使用它来对OAuth服务进行API调用/用户信息端点。与授权代码流不同,这也通过浏览器进行。

get /userInfo http /1.1主机:oauth-resource-server.com授权:携带者z0y9x8w7v6u5

5.资源赠款

资源服务器应验证令牌是否有效,并且属于当前客户端应用程序。如果是这样,它将通过发送请求的资源即基于与访问令牌关联的范围发送所请求的资源来做出响应。

{“用户名”:“ Carlos”,“电子邮件”:“ carlos@carlos-montoya.net”}

客户端应用程序最终可以用于其预期目的。在OAuth身份验证的情况下,通常将其用作授予用户认证的会话并有效地记录它们的ID。

免费注册以跟踪您的学习进度

通过Portswigger的网络安全学院工作的好处beplay官网可以赌beplay体育能用吗
  • 练习在现实目标上利用漏洞。

  • 记录您从学徒到专家的发展。

  • 看看您在我们的名人堂中排名。

已经有一个帐户?在此登录