想象一下这次攻击
- 攻击者拦截对授权服务器的第一次调用,然后进行代码挑战。 (图中的步骤1)
- 攻击者现在使用授权代码拦截来自授权服务器的响应。 (图中的步骤2)
- 然后攻击者可以 POST 授权代码和代码验证程序来获取访问令牌。 (步骤3)
Refer to this diagram:
flow:
问题
什么可以阻止攻击者拦截对授权服务器的第一次调用?这就是让授权码 + PKCE 比隐式流更安全的目的。
也许调用被拦截并不重要,因为代码挑战已被散列,因此攻击者没有第二次调用所需的代码验证器。但是如果代码挑战没有经过哈希处理怎么办?
PKCE 旨在解决从 URL 泄露访问令牌/授权代码的威胁,与拦截 SSL 流量的攻击者相比,这种威胁相对容易发生:
- URL 在地址栏中可见
- URL 保存在浏览器历史记录中
- 在本机平台上,可以注册多个应用程序以使用相同的自定义 URI 方案
也就是说,建议代码挑战是代码验证者的 SHA256 哈希,因此即使攻击者拦截代码挑战,他们也无法在无法反转 SHA256 的情况下完成令牌交换。
另请参阅:PKCE 实际上保护什么? https://security.stackexchange.com/questions/175465/what-is-pkce-actually-protecting
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)