Oauth2 PKCE - 可以信任 refresh_token 吗?

信息安全 oauth2
2021-09-02 23:06:09

如果 a 有一个使用 PKCE 对我的服务器授权的移动设备,这允许它获取 aaccess_token和 a refresh_token,我应该在多大程度上相信该应用程序可以refresh_token从现在开始使用该来获取access_token当然,导致标准发明 PKCE 的相同问题在这里起作用?

我之所以问,是因为当我在为 Auth2 使用 Ruby 库时,我发现这样做是可以的,这让我感到困惑。这个特殊用例不应该禁止 refresh_tokens 吗?

编辑:不确定这是否会成为答案,但也许我们在这里假设(给定 TLS 连接),refresh_token 被安全地发送回应用程序,只要应用程序直接与服务器对话,我们就是好的?

1个回答

OAuth2 授权码授予有两个阶段:

  1. 使用浏览器重定向交换授权代码的主凭据
  2. 通过安全通道交换访问令牌(以及可选的刷新令牌)的授权代码

对于本机应用程序,在某些情况下,浏览器重定向可能会将重定向的响应暴露给另一方。有关详细信息,请参阅RFC 8252,并注意描述 PKCE 解决的问题的第 8.1 节。

PKCE 确保如果授权码暴露给另一方,则该方不能使用授权码来获取访问和刷新令牌。

第二步不使用浏览器重定向。因此,返回的敏感令牌不能以相同的方式暴露。

由于刷新令牌是使用安全通道返回的,因此可以安全地使用它来获取新的访问令牌,而无需 PKCE 质询和验证步骤。