PKCE:当然黑客仍然可以窃取访问令牌吗?

问题描述

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

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

在这里遗漏了什么吗? 非常感谢。

解决方法

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

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

使用授权代码流可以更好地处理这一点,并减少漏洞利用的范围:

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

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

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

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

在 SPA 的情况下,令牌不应该容易被窃取,特别是如果按照建议仅存储在内存中。但是,在浏览器中使用令牌的时候有更多的顾虑,因为它是一个危险的地方,你需要遵循SPA Best Practices

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