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存在第三方帐号快捷登录授权劫持漏洞