2

我在我的项目中使用 keycloak 作为 sso,我在那里有 2 个域。这里我项目中的用例是如果用户登录到一个域。我必须显示与登录另一个域相同的用户。

问题:这里我们有 2 个域。我们以 Angular 的方式运行前端,以 java 的方式运行后端。在这里,我们使用 spring boot 对 keycloak rest-api 进行身份验证。这里的会话是无状态的。如果我在一个域中登录,它不会显示为在另一个域中登录。

我们在前端使用带有“check-sso”选项的 keycloak js 来检测用户是否登录的天气。我们正在使用来自 keycloak 身份代理的社交登录。使用户进行身份验证。在这种情况下,keycloak-js 库正在检测用户是否已登录。在第二种情况下,正常的身份验证流程。我们正在使用 keycloak REST-API 对用户进行身份验证。在这种情况下,我们使用 spring boot keyclaok 适配器供用户进行身份验证。在此流程中,keycloak js 库未将用户标识为已通过身份验证。如果他从 spring boot keyclaok 适配器登录。

谁能帮我解决这个问题。

提前致谢。

4

1 回答 1

2

登录后,Keycloak 会在“auth.example.com”下设置多个 cookie,例如“KEYCLOAK_SESSION”和“KEYCLOAK_IDENTITY”。每个使用 url “auth.example.com” 配置 keycloak 并重定向到登录屏幕的应用程序都将被直接重定向回来,因为 cookie 被 Keycloak 识别。这是您所指的单点登录功能。

您可以想象:用户打开一个使用例如“auth.example.co.uk”(注意不同的域)并被重定向到登录屏幕的应用程序将看到登录掩码,因为该域下没有设置任何cookie。

简而言之:sso 仅在域统一时才有效。

于 2020-08-04T11:49:23.030 回答