【问题标题】:Using Google's OAuth 2.0 revoke endpoint invalidates all other tokens for user使用 Google 的 OAuth 2.0 撤销端点会使用户的所有其他令牌无效
【发布时间】:2018-12-18 16:10:13
【问题描述】:

长话短说,我开发了一个浏览器扩展程序,其中用户通过第三方文件主机进行身份验证以用作后端存储(目前只有 Dropbox 和 Google Drive)。当扩展程序调用 /tokeninfo 时,我的一些用户报告 400 错误,此时应用程序被破坏,迫使他们重新进行身份验证。现在我终于成功地重现了这个问题-

如果用户在两个或多个浏览器中使用 Google Drive 安装并验证此扩展程序,仅从其中一个浏览器撤消单个访问令牌会导致其所有其他访问/刷新令牌对应用程序无效。。 Dropbox 不会出现此问题。

这表明:

1) 我对 Google 的 /revoke 端点的理解是错误的,撤销一个令牌总是会撤销对整个应用程序的访问权限

2) Google 对 OAuth 的 revoke 方法的实现是不正确的,不应撤销来自额外令牌的访问权限

3) Dropbox 对 OAuth 的 revoke 方法的实现不正确,应该撤销所有附加令牌的访问权限

我在 Google 的一个问题跟踪器上recently filed a report,但不幸的是,它似乎是一个不活跃的社区,我还没有收到任何反馈。

一种潜在的解决方法可能是让令牌自行过期,但我认为这会产生误导和安全问题,因为用户可能希望在从 Google 云端硬盘取消链接扩展程序时访问凭据会立即失效。

任何见解都将不胜感激!

【问题讨论】:

    标签: oauth google-oauth


    【解决方案1】:

    我不认为 Google 的实施与 Oauth 规范不一致。 RFC 7009 -- Oauth threat model 引用的内容专门谈到了令牌撤销,并指出:

    根据授权服务器的撤销策略, 特定令牌的撤销可能会导致相关令牌的撤销 令牌和基础授权授予。如果特定 token 是一个刷新令牌,授权服务器支持 撤销访问令牌,那么授权服务器应该 也使基于相同授权的所有访问令牌无效 授予(见实施说明)。如果令牌传递给请求 是访问令牌,服务器可以撤销相应的刷新 令牌也是。

    这种明显的疯狂背后是有方法的。如果有人正在撤销令牌,则表明它已被泄露。虽然有人可能认为允许合法用户撤销攻击者的令牌很好,但想想反方:你不希望攻击者撤销合法用户的令牌,并阻止他/她重新获得访问权限到他/她的帐户。最安全的事情是撤销一切。当他们谈论刷新令牌轮换(Oauth 中的可选功能)时,Oauth threat model 中提出了这一点:

    由于授权服务器无法确定是攻击者还是攻击者 合法客户端正在尝试访问,以防此类访问 尝试有效的刷新令牌和访问授权 与之关联的都被撤销。

    但是,我同意访问令牌感觉有点极端,因为这些令牌具有有限的生命周期和有限的范围。刷新令牌更严重,需要更高的安全性。 Auth0 implements refresh token revocation like this.

    【讨论】:

    • 谢谢,这正是我正在寻找的答案!我之前已经阅读了 RFC 规范的一部分,但没有注意到这个关于撤销策略可能不同的小消息。在这种情况下,我将针对此问题实施解决方法并通知用户。
    猜你喜欢
    • 1970-01-01
    • 2015-05-06
    • 2017-06-20
    • 2022-07-05
    • 2017-06-15
    • 2014-02-25
    • 1970-01-01
    • 2022-10-03
    • 1970-01-01
    相关资源
    最近更新 更多