我正在致力于使用 oidc-provider 和 oidc-client-ts 使用授权代码流和 pkce 创建 sso 解决方案。我已准备好核心配置项,并且可以通过流程向上获取带有 access_token 和 id_token 的响应。我正在努力实现 httpOnly cookie 场景,但对于如果我在同一子域上有两个应用程序和完全位于该域外部的第三个应用程序如何实现 sso 感到困惑。
首次登录后,httpOnly cookie 将如何转移到后续应用程序?如果不是,我需要采取什么策略来实现这一点?
一旦向其他应用程序发出请求,oidc-provider 如何知道该用户已经登录?
这里有多个组件。
浏览器前端
oidc-client-ts
库仅用于在 JavaScript 中运行流程并在浏览器中使用访问令牌。
如果您希望浏览器应用程序将 cookie 发送到您的后端组件,您需要使用前端后端 (BFF)。
好朋友
这可以是 Web 后端,也可以是实用程序 API,为基于浏览器的应用程序发出应用程序 cookie。它必须在与 Web 源相同的父域中运行,以便发送的 cookie 是第一方的并且不会被浏览器丢弃。
位于
https://www.product.com
的 SPA 可能会使用这些 cookie 属性:
OIDC 提供商
这会发出一个不同的 cookie,即 SSO cookie,它通常是您的应用程序的第三方。
https://login.example.com
的提供商将使用这些属性: