【问题标题】:Is Oauth2 authorization code bound with the client id?Oauth2 授权码是否与客户端 ID 绑定?
【发布时间】:2018-07-25 17:38:42
【问题描述】:

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

【问题讨论】:

    标签: security oauth-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

    【讨论】:

    • 感谢您的回复,帖子有点误导。看下一句,“令牌端点将验证请求中的所有参数,确保代码没有过期并且客户端 ID 和密钥匹配。”我的理解是 client_secret 是用来验证它确实是从 client_id 发送的
    • 不仅如此......它还用于检查服务器发出的授权码是否与您现在要求的访问码相同的client_id。
    【解决方案2】:

    简答:授权码绑定到发出它的客户端

    这由 RFC6749 严格执行,并在4.1.3. Access Token Request 部分中说明。此外,它是授权服务器为验证令牌请求而执行的众多检查之一。规格有以下说明,

    授权服务器必须:

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

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

    此外,授权码是一个临时秘密,不得向其他方泄露。这在安全考虑的10.5. Authorization Codes 部分中突出显示。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-13
      • 2020-03-27
      • 1970-01-01
      • 1970-01-01
      • 2013-09-05
      相关资源
      最近更新 更多