Oauth2授权代码是否与客户端ID绑定?

时间:2018-07-25 02:51:12

标签: security oauth-2.0

我尝试使用“使用Google登录”来登录两个单独的网站。截获来自第一个站点的身份验证代码,并将其与自动代码交换到第二个站点。两个站点都不允许我登录。我记得在RFC6749中没有指定要与任何身份绑定的auth代码,是为了提高安全性而实施的吗?

2 个答案:

答案 0 :(得分:1)

这确实是OAuth2.0安全性的一部分:

  

将授权代码交换为访问令牌

     

我们准备结束流程。现在,该应用程序已经   授权代码,它可以使用它来获取访问令牌。

     

应用程序向服务的令牌端点发出POST请求   具有以下参数:

     

grant_type = authorization_code-这告诉令牌端点   应用程序正在使用授权码授予类型。

     

代码-   应用程序包括在   重定向。

     

redirect_uri-在以下情况下使用的相同重定向URI:   请求代码。某些API不需要此参数,因此您将   需要仔细检查您所使用的特定API的文档   访问。

     

client_id-应用程序的客户端ID。

     

client_secret-   应用程序的客户端密钥。这样可以确保请求得到   访问令牌仅由应用程序生成,而不是由   可能已经拦截了授权码的潜在攻击者。

来自https://developer.okta.com/blog/2018/04/10/oauth-authorization-code-grant-type#exchange-the-authorization-code-for-an-access-token

答案 1 :(得分:1)

简短答案:授权代码已绑定到已颁发的客户端上

这是由RFC6749严格执行的,并在4.1.3. Access Token Request部分中进行了说明。而且,它是许多Checkes授权服务器执行的用于验证令牌请求的程序之一。规格说明如下,

  

授权服务器必须:

     

o 确保授权代码已发给已验证的用户   机密客户,或者如果客户是公开客户,请确保代码   已在请求中发给“ client_id”

因此,授权服务器将根据客户端类型对照客户端ID或客户端凭据交叉检查授权代码。

此外,授权码是一个临时机密,不得透露给其他方。安全注意事项的10.5. Authorization Codes部分对此进行了突出显示。