Angular 的 Keycloak 自动登录

Keycloak with Angular logins automatically

我有一个 Angular 9 应用程序。尝试连接 Keycloak 服务器。 我的最终目标是为 3 个应用程序提供 SSO,每个应用程序都有 auth-guard(仅访问某些页面需要身份验证)。

有多个问题,但一次解决一个问题。

将 keycloak-angular 与 keycloak-js 一起使用。

当我执行 keycloak.login()(有或没有 redirectUri)时,大部分时间它会转到 keycloak/auth 页面并返回经过身份验证 - 无需等待用户输入。 我仔细检查了不要在浏览器自动填充中保存任何用户数据。

我会应要求分享更多数据。


更新:

我在 Keycloak 控制台中看到,即使在注销后,会话仍然处于活动状态。 使用:

keycloakservice.clearToken();
keycloakservice.logout();

更新:

将注销代码更改为:

this.keycloakService.logout().then(() => this.keycloakService.clearToken());

keycloak cookie 每次都被删除,但 keycloak 中的会话保留了大约 50% 的时间。 (见截图)。 Angular、keycloak-js和keycloak-angular更新到最新版本

您似乎没有正确注销。

您必须访问您的身份提供者(在本例中为 Keycloak)OIDC 注销端点以正确注销 OIDC - 只需导航整个浏览器(后台 AJAX/axios 调用不起作用!)到:

https://keycloak_host/auth/realms/insert_realm_here/protocol/openid-connect/logout?redirect_uri=<your-app-host/optional-whitelisted-url-where-you-say-goodbye-to-users>

这将正确终止您的 Keycloak SSO 会话。 redirect_uri 是可选参数,如果您将用户重定向回某些“再见”路由,这将是很好的用户体验 - 它必须从身份验证中列入白名单,因为用户不会有任何 SSO session/cookie那个时候。

我在使用 angular-auth-oidc-client 和 angular 12 时遇到了同样的问题。 该库允许您使用方法 getEndSessionUrl() and then you do a logOut 获取用于从 STS(Keycloak)注销的 URL,并在订阅回调中将浏览器重定向到 Keycloak 注销 URL,这将结束您的Keycloak 服务器上的会话。

@Jan Garaj 的回答是正确的。