【发布时间】:2018-07-25 17:38:42
【问题描述】:
我尝试使用两个单独的网站登录,均使用“使用 Google 登录”。从第一个站点截取授权码,并与自动代码交换到第二个站点。两个网站都不会让我登录。我记得在 RFC6749 中没有指定要与任何身份绑定的身份验证码,是为了提高安全性而实现的吗?
【问题讨论】:
我尝试使用两个单独的网站登录,均使用“使用 Google 登录”。从第一个站点截取授权码,并与自动代码交换到第二个站点。两个网站都不会让我登录。我记得在 RFC6749 中没有指定要与任何身份绑定的身份验证码,是为了提高安全性而实现的吗?
【问题讨论】:
这确实是 OAuth2.0 安全性的一部分:
用授权码交换访问令牌
我们即将结束流程。现在应用程序已经 授权码,它可以使用它来获取访问令牌。
应用程序向服务的令牌端点发出 POST 请求 具有以下参数:
grant_type=authorization_code - 这告诉令牌端点 应用程序正在使用授权码授权类型。
代码 - 的 应用程序包括它在 重定向。
redirect_uri - 使用相同的重定向 URI 请求代码。某些 API 不需要此参数,因此您将 需要仔细检查您使用的特定 API 的文档 访问。
client_id - 应用程序的客户端 ID。
client_secret - 应用程序的客户端密码。这样可以确保获取到的请求 访问令牌仅来自应用程序,而不是来自 可能已经截获了授权码的潜在攻击者。
【讨论】:
简答:授权码绑定到发出它的客户端
这由 RFC6749 严格执行,并在4.1.3. Access Token Request 部分中说明。此外,它是授权服务器为验证令牌请求而执行的众多检查之一。规格有以下说明,
授权服务器必须:
o 确保授权码已发给经过身份验证的人 机密客户,或者如果客户是公开的,请确保代码 在请求中发给“client_id”
因此,当授权服务器根据客户端类型交叉检查授权代码与客户端 ID 或客户端凭据时。
此外,授权码是一个临时秘密,不得向其他方泄露。这在安全考虑的10.5. Authorization Codes 部分中突出显示。
【讨论】: