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

PKCE: Surely hacker can still steal access token?

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

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

这里有我遗漏的东西吗? 非常感谢。

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

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

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

  • 第 1 阶段:returns 一次使用 'authorization code'
  • 的浏览器重定向
  • 第 2 阶段:通过直接 Ajax 请求
  • 交换代币代码

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

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

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

在 SPA 情况下,令牌不应轻易被窃取,尤其是如果按照建议仅存储在内存中。但是在浏览器中使用token的时候比较担心,因为这是一个危险的地方,需要遵守SPA Best Practices.

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

我认为你是对的。令牌不在仅限 http 的 cookie 中,因此可以通过恶意脚本访问(通过 XSS 攻击注入)。攻击脚本可以从本地存储(或放置它们的任何地方)读取所有令牌(在成功且正常的身份验证流程之后)并使用它们。

我认为 CORS 保护应该防止恶意脚本将令牌直接发送给攻击者,这将是毁灭性的失败,因为这可能包括一个长期存在的刷新令牌。因此,我怀疑在使用这些基于本地客户端的流程时正确配置 CORS 非常关键(本地客户端是指浏览器、移动应用程序或本机 PC 应用程序)。

简而言之,这些本地客户端流可以变得安全,但如果存在 XSS 攻击或 CORS 配置不当,那么这些攻击可能会变得极其危险 - 因为刷新令牌可能会发送给攻击者让他们在自己的好时机随意使用,这与攻击所能达到的一样糟糕。