PKCE:黑客肯定还能窃取访问令牌吗?

chr*_*ber 4 oauth-2.0 implicit-flow pkce

根据我的理解,授权代码流相对于隐式流的优势在于,使用 ACF,访问令牌将发送到服务器端应用程序而不是浏览器应用程序。这使得访问令牌更难被窃取,因为访问令牌永远不会到达浏览器(因此不易受到跨站点脚本攻击)。

我本以为 PKCE 会尝试解决这个问题。但事实并非如此。访问令牌仍然发送到浏览器。因此它仍然可以被盗。

我在这里缺少什么吗?非常感谢。

Gar*_*her 6

授权代码流 (PKCE) 被认为比之前的隐式流解决方案具有更高的安全性:

  • 通过隐式流,访问令牌直接在浏览器 URL 中返回,并且可以在日志或浏览器历史记录中查看

通过授权代码流,可以更好地处理此问题,并减少漏洞利用的范围:

  • 第 1 阶段:浏览器重定向,返回一次性使用“授权代码”
  • 第 2 阶段:然后通过直接 Ajax 请求完成将代码交换为令牌

PKCE 还提供保护,防止恶意方拦截浏览器响应中的授权代码并能够将其交换为令牌。

两者都是客户端流,它们存在的原因是在公共客户端中使用访问令牌。授权代码流 (PKCE) 是所有这些的标准流程:

  • 单页应用程序
  • 移动应用程序
  • 桌面应用程序

在 SPA 情况下,令牌不应轻易被窃取,特别是如果按照建议仅存储在内存中。然而,在浏览器中使用令牌时存在更多担忧,因为这是一个危险的地方,并且您需要遵循SPA 最佳实践

在浏览器情况下,当然还有其他选项,例如通过 Web 后端或反向代理路由请求以使令牌远离浏览器,以及除了使用令牌之外还处理身份验证 cookie。