SPA:客户端会话处理与 PKCE 的 OAuth 授权代码流相结合

SPA: Client Side Session Handling in Combination with OAuth Authorization Code Flow with PKCE

提问人:Matthias M 提问时间:9/7/2023 最后编辑:Matthias M 更新时间:11/9/2023 访问量:37

问:

我们有一个单页应用程序 (SPA) 和 OAuth 身份验证。

我们将授权代码流与 PKCE 一起使用,因为它被认为是最安全的客户端身份验证方法。 但 OAuth 仅与身份验证有关。

考虑

  • 安全的会话管理怎么样?我该如何确保OAuth令牌不会被盗?
  • 在经典的 Web 应用程序中,我们使用带有安全、仅限 http 和相同站点策略标志的 cookie。
  • 一种模式可以是前端模式的后端。但是我们希望有一个纯粹的前端应用程序。
  • CSP 可能会有所帮助。但是,如果没有100%配置,仍然会有漏洞。此外,我们还有一些(受信任的)第三方代码要包含,这将导致复杂的 CSP 配置。
  • 当然,我们关心XSS。但我们也认为,我们永远无法保证,该应用程序是 100% XSS 安全的。

溶液?

关于OAuth本身有很多最佳实践,但即使是OWASP会话管理备忘单也没有给出如何在SPA中存储令牌的精确建议。

我们的解决方案可能是将令牌存储在浏览器会话存储中。这应该可以防止 CSS 攻击(我们没有用户生成的内容,因此应该没有存储的 XSS)。

最后的问题

  • 浏览器会话存储是否安全用于存储令牌?
  • 可能进行哪些攻击?
  • 必须采取哪些对策?
JavaScript OAuth-2.0 单页应用程序 OWASP

评论

0赞 Gary Archer 9/8/2023
看看我的一位同事之前的帖子,我认为它为同一主题提供了一些很好的答案。

答:

0赞 Matthias M 11/9/2023 #1

前端模式的后端

如果外部 API 很少,前端模式的后端可能是一个不错的选择。缺点是您必须代理每个外部 API。如果您使用许多外部 API,这会带来额外的工作量和不灵活性。

内容安全策略

在浏览器中保护令牌的最佳方法是使用 CSP。当然,您需要注意,CSP没有任何漏洞。应通过 CSP 验证程序验证 CSP。

会话存储

会话存储只是一个弱的对策:

  • 攻击者可能通过 XSS 漏洞操纵身份验证过程,还可能获取令牌。
  • 操作身份验证过程只需要更复杂的知识,而不仅仅是从 localStorage 获取现有令牌。