将OIDC流程中的代码验证器暴露给前端代码是否安全?

问题描述 投票:0回答:1

我目前正在通过 OIDC 实施身份验证。我的前端 SPA 托管在与后端不同的域上。启动登录流程时,我需要以某种方式存储生成的代码验证程序,以验证登录完成请求实际上来自启动流程的用户(至少这就是我对整个事情的理解)。我目前在签名 cookie 中设置了代码验证器。这样,我就可以在后端读取并验证它。但由于我的前端与后端位于不同的域,因此 cookie 需要为 SameSite="none",它将很快被 chrome 阻止,并且已经被其他浏览器阻止。

我考虑过加密,然后将代码验证器传递到前端 SPA,然后前端 SPA 可以将其保存到本地存储,然后进行重定向,然后当再次从发行人重定向到 SPA 时,我会从本地存储读取它并发送它连同请求。我的后端将解密并使用它来完成流程,然后返回令牌。

这样做安全吗?

authentication openid-connect
1个回答
0
投票

首选方案是将后端分为两部分:

  • SPA 前端的后端
  • SPA 调用的 API

针对 XSS 的首选安全性和防护措施在基于浏览器的应用程序的 OAuth 中进行了描述。这可以避免将令牌返回到浏览器。

可能的网址

BFF 通常运行在 Web 域中。如果您拥有整个域,另一种选择是在这样的子域中托管实用程序 API。

饼干

BFF 始终与 SPA 位于同一站点,尽管它可以是不同的源。 BFF 始终会发出浏览器不会丢弃的

HTTP Only SameSite=strict
cookie。

在登录流程期间,BFF 会发出一个包含

state
code_verifier
值的临时 cookie。登录后,SPA 向用于 API 请求的浏览器发出 cookie。

示例

我的 示例 SPA 使用一种可能的 BFF 实现,尽管在线文章中还有许多其他实现。

© www.soinside.com 2019 - 2024. All rights reserved.