【问题标题】:Why doesn't OAuth2 spec define JSON response mode for implicit flow?为什么 OAuth2 规范没有为隐式流定义 JSON 响应模式?
【发布时间】:2014-07-10 17:13:20
【问题描述】:

我想知道为什么 OAuth2 规范没有定义 JSON 响应模式来在隐式授权流中返回访问令牌。 是因为没有时间对此达成一致并指定它吗?或者以 JSON 格式返回访问令牌是否会打开某些安全漏洞?如果是这样,知道哪个会很有趣(我怀疑可以通过验证请求的 ContentType 或 RequestedWith 标头来缓解将 JSON 返回到恶意脚本标签中)。

有大量现代 javascript 应用程序需要刷新访问令牌。当受保护资源的权限经常更改时(例如,当某些用户向其他用户授予他们拥有的资源的权限时)通常需要这样做。在这种情况下,每次访问受保护的资源时都需要获取访问令牌。

目前 OAuth2 规范提供了 2 种响应模式:片段和表单发布(在草稿中)。 片段响应需要一个对用户不友好的重定向。也可以将带有方法 GET 的表单发布到隐藏的 iframe 中,该 iframe 将回调将访问令牌传递给父窗口的 javascript 代码。但从开发的角度来看,这是相当骇人听闻的方法。

通过 AJAX 请求以 JSON 格式返回访问令牌会更简洁,因为它不会损害安全性。

【问题讨论】:

    标签: javascript oauth-2.0 openid


    【解决方案1】:

    重定向对于确保将访问令牌传递给 RP 而不是隐式流中的攻击者至关重要。

    如果 Stack Overflow 有一个带有 OAuth2 Implicit Grant 的 REST API,它以某种 JSON 格式返回令牌,那么我所要做的就是欺骗您访问我的一个网页,然后假装是官方 Stack Overflow客户端通过您的会话请求访问令牌(因为您可能已登录)。

    SO 服务器将使用您的访问令牌返回(通过 CORS)一些 JSON 给我,然后我可以冒充您,而您不会更聪明。

    既然无论如何您都必须进行重定向,可以在 JSON 令牌中添加参数并将其添加到查询参数中。 但是,如果您已经需要进行查询/片段解析,您不妨从查询/片段中获取参数,而不是强制客户端进行 JSON 解析。

    【讨论】:

    • 你能澄清一下吗?假设 SO 是我们的受害者, evil.com 是您欺骗用户访问的网站。当您代表用户从 evil.com 向 SO 发出 JSON 请求时,您需要将其与凭据一起发送(否则,请求 cookie 将不会发送到 SO,并且它不会返回访问令牌,因为请求是未认证)。当您发送带有凭据的请求时,SO 必须在其 Access-Control-Allowed-Origins 中明确地将 evil.com 列入白名单。是的,在
    • 是的,这意味着 evil.com 只能获取已经同意该客户端的用户的凭据(最适合使用 XSS 漏洞、一些社会工程或非常大的用户根据)。像 SO 这样的大型聚会不会将每个 API 客户端都列入白名单,他们只会允许所有客户端。
    • 不,我的意思是 evil.com 将无法获得任何凭据 - 当使用 cookie 执行跨域 ajax 请求时,必须将 evil.com 列入白名单,让一切都行不通。例如,请参阅this。如果用户同意邪恶的客户,那么这里根本没有任何帮助。社会工程 - 是的,但这是攻击的不同载体。所以我仍然不太确定漏洞是什么:)
    • 现在回想起来,基本上可以归结为以下问题:您可以使用 CSRF 使用基于 cookie 的授权从网站窃取私人数据吗?是的,当用户点击图片和类似内容时,您可以通过将他发送到 //so.com/account/delete 来篡改用户,但您无法真正读取用户的私人数据。好吧,重新调整 JSON 数组存在一些漏洞,但我们在这里不考虑这些。
    • (只要 evil.com 有你的 client_id 和访问令牌)- evil.com 没有我的访问令牌,它必须先窃取它 :) 后端请求也不起作用 - evil.com它的后端没有我的 cookie,因此它只能使用来自浏览器的凭据发出请求。所以我仍然没有看到如何窃取访问令牌......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-06
    • 1970-01-01
    • 1970-01-01
    • 2012-11-03
    • 1970-01-01
    相关资源
    最近更新 更多