OAuth授权码流安全问题(授权码被黑客截获)

Posted

技术标签:

【中文标题】OAuth授权码流安全问题(授权码被黑客截获)【英文标题】:OAuth authorization code flow security question (authorization code intercepted by a hacker) 【发布时间】:2021-08-21 01:06:55 【问题描述】:

我无法理解的东西。 据我了解,授权代码流应该比隐式流更安全,因为令牌不是从授权服务器直接发送到客户端,而是由您的后端检索。 所以流程基本上是:

    浏览器获取授权码(作为排序的 URL 参数)。 将其发送到公共后端端点。 后端将代码 + 客户端密码发送到授权服务器,检索令牌并将其存储在客户端的 cookie/本地存储中以供进一步使用。

在这个流程中,所有教程都将授权码描述为对黑客无用,这是为什么呢?黑客不能使用 Postman 或其他一些客户端并直接访问您的(公共)API,使其通过第 3 步,从而以相同的方式检索令牌吗?

我在这里错过了什么?

【问题讨论】:

【参考方案1】:

code 只使用一次。在许多攻击者可能会访问code 的情况下,它已经被交换为访问令牌,因此无用。

authorization_code 是一次性令牌。

【讨论】:

一个小后续:是否有可能在实际流程完成之前拦截授权码并访问BE API,从而劫持令牌?是否有防止这种情况发生的最佳做法? @Matan,是的。您应该使用 PCKE。这是authorization_code 流程的扩展。【参考方案2】:

授权码又名auth code是公开使用的,这样客户端就可以在他和授权服务器之间建立一个安全的反向通道,这样他就可以在不使用浏览器的情况下与访问令牌交换它。

auth code 是公开的,可以通过代理拦截,因为它出现在redirect_uri 的查询中并通过浏览器使用(这被认为是不安全的)。访问令牌取决于交换的auth_code(公共)和client_secret(私人)。如果没有client_secret,攻击者可以通过这种方式暴力破解access token

总结:即使攻击者知道authcode,他也可以在没有client_secret 在注册时(或动态地)提供给客户端并假定它是安全的情况下做任何事情。

【讨论】:

以上是关于OAuth授权码流安全问题(授权码被黑客截获)的主要内容,如果未能解决你的问题,请参考以下文章

安全预警关于OAuth 2.0存在第三方帐号快捷登录授权劫持漏洞

AppIron先天免疫OAuth 2.0授权劫持漏洞

从客户端 JS 代码中使用 OAuth 授权代码流令牌是不是安全?

具有预配置授权的 OAuth 安全性

Oauth 2.0 隐式授权有多安全?

IBM Mobile First 8.0 oAuth - 授权码交付到非预期服务器