You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Keycloak重复会话问题:Angular 17跨路径应用登录异常排查

解决方案:Keycloak同域子应用重复会话错误修复

问题根源

同域下的根路径与/insurance/子路径应用未正确共享Keycloak会话Cookie,加上原配置中onLoad: 'login-required'会强制触发新登录流程,直接命中Keycloak的会话限制规则。

前端配置调整

1. 修改Keycloak初始化逻辑,启用静默SSO检测

将onLoad从login-required改为check-sso,优先检测已有会话,避免强制创建新会话。同时配置静默检查的重定向页面,确保子应用能正确识别根域的会话Cookie:

export function initializer(keycloak: KeycloakService): () => Promise<any> {
  return (): Promise<any> => {
    return new Promise(async (resolve, reject) => {
      try {
        const isAuthenticated = await keycloak.init({
          config: {
            url: KEYCLOAK_ISSUER_URL,
            realm: KEYCLOAK_REALM,
            clientId: KEYCLOAK_CLIENT_ID,
          },
          initOptions: {
            checkLoginIframe: true,
            onLoad: 'check-sso', // 先检测已有会话,而非强制登录
            silentCheckSsoRedirectUri: `${window.location.origin}/insurance/assets/silent-check-sso.html`, // 子应用的静默检查页面路径
          },
          bearerExcludedUrls: [BEARER_EXCLUDE_URL]
        });

        // 仅当未认证时触发登录流程
        if (!isAuthenticated) {
          await keycloak.login({
            redirectUri: `${window.location.origin}/insurance/` // 登录后重定向回子应用
          });
        }
        resolve('Success');
      } catch (error) {
        reject(error);
      }
    });
  };
}

2. 添加静默检查页面

在Angular项目的src/assets目录下创建silent-check-sso.html文件,用于接收Keycloak的静默会话检测结果:

<!DOCTYPE html>
<html>
<body>
  <script>
    parent.postMessage(location.href, location.origin);
  </script>
</body>
</html>

Keycloak客户端配置配合(必须操作)

登录Keycloak控制台,找到对应客户端,调整以下设置:

  • Settings标签:
    • 将Cookie Path设为/,让会话Cookie在整个example.com域名下生效。
    • Valid Redirect URIs添加https://example.com/insurance/*,确保子应用的登录回调路径合法。
    • Web Origins设为https://example.com,允许同域应用共享会话Cookie。
  • Session Settings(Realm级别):
    确认Maximum Sessions per User的规则,如果是按客户端限制会话数,需确保两个应用使用同一个Keycloak客户端ID;若需跨客户端共享会话,可开启Session Idle Timeout的全局共享配置。

额外验证

  • 清除浏览器缓存和Cookie后重新测试,确保新的会话Cookie路径为根域。
  • 检查浏览器开发者工具的Application > Cookies,确认KEYCLOAK_SESSION等Cookie的Path值为/。

内容的提问来源于stack exchange,提问作者kamrul Islam Tushar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 12:37:24