使用 SPA 时在 identityServer 端保持会话活动

Keep a session active on the identityServer side while using SPA

我们有 3 个应用程序:管理站点 运行 IdentityServer、SPA、带有休息服务的 webapi。

在第一个(使用 IdentityServer)上,我们有一些额外的管理员 ui。存在一项要求ui,即连接的用户无需身份验证即可从我们的 SPA 应用程序无缝转到此管理员 ui。因此,通过重定向从一个 Web 应用程序到另一个 Web 应用程序。

问题是如何使两个 'sessions' 保持同步,以便 none 在至少一个正在使用时过期?

问题示例: 应用设置:

  1. spa_web.com - 我们的 spa 应用程序 -> 获取有效期为 1 小时的访问令牌和刷新令牌。
  2. authorityWithIdServer.com - 我们的 ID 提供商网站 -> 有一个 cookie 维护会话设置为 1 小时到期。

步骤: 1. 首先我们去spaWeb.com。 2. 用户需要进行身份验证,因此被重定向到 authorityWithIdServer.com 并填写登录表单。 3. 使用授权代码流,我们被重定向回 spaWeb.com 并最终获得本地存储的访问令牌和刷新令牌。 4. 我们只使用了几个小时的水疗应用程序。我们的访问令牌使用刷新令牌定期更新。 5. 现在我们决定去 authorityWithIdServer.com 上的管理员 ui。 6. 我们再次获取登录表单以登录该应用程序。

是否可以在我们使用 spaWeb.com 时滑动 authorityWithIdServer.com 的 cookie,以免被迫再次登录。

  1. 您不应在客户端应用程序中使用刷新令牌。更改为授权代码并使用无提示(iframe 中的 prompt=none)更新令牌的方式。 oidc-client-js 开箱即用地实现了会话监控。
  2. 如果您执行上述操作,那么由于续订请求是通过 authorize 端点在浏览器的上下文中发生的,因此 IDP 的身份验证是通过 cookie 完成的,因此任何滑动逻辑都会自动启动。

另请注意,identityserver4 允许您控制客户端必须通过授权端点 max_age 参数和 UserSsoLifetime 客户端设置进行交互身份验证的频率。