在使用 PKCE 的 OAuth 2.0 授权代码流程中,是什么阻止在第一次调用身份验证服务器时拦截代码质询?

joh*_*854 5 oauth-2.0 openid-connect pkce

想象一下这次攻击

  1. 攻击者拦截对授权服务器的第一次调用,然后进行代码挑战。(图中的步骤1)
  2. 攻击者现在使用授权代码拦截来自授权服务器的响应。(图中的步骤2)
  3. 然后攻击者可以 POST 授权代码和代码验证程序来获取访问令牌。(步骤3)

参考这张图:流程:在此输入图像描述

问题

  1. 什么可以阻止攻击者拦截对授权服务器的第一次调用?这就是让授权码 + PKCE 比隐式流更安全的目的。

  2. 也许调用被拦截并不重要,因为代码挑战已被散列,因此攻击者没有第二次调用所需的代码验证器。但是如果代码挑战没有经过哈希处理怎么办?

Jus*_*tin 3

PKCE 旨在解决从 URL 泄露访问令牌/授权代码的威胁,与拦截 SSL 流量的攻击者相比,这种威胁相对容易发生:

  • URL 在地址栏中可见
  • URL 保存在浏览器历史记录中
  • 在本机平台上,可以注册多个应用程序以使用相同的自定义 URI 方案

也就是说,建议代码挑战是代码验证者的 SHA256 哈希,因此即使攻击者拦截代码挑战,他们也无法在无法反转 SHA256 的情况下完成令牌交换。

另请参阅:PKCE 实际保护的是什么?