gpt4 book ai didi

java - 使用 Keycloak SSO 在 2 个应用程序之间保持身份验证

转载 作者:行者123 更新时间:2023-12-04 17:42:30 25 4
gpt4 key购买 nike

我有 2 个 JHipster 应用程序,每个应用程序都在一个子域(app1.domain.tld 和 app2.domain.tld)上运行。

在这两个应用程序中,用户都通过 Keycloak 登录。顺序是这样的:

  1. Angular 应用向 Keycloak 发送/authenticate 请求和凭据
  2. 如果响应成功,则返回一个身份验证 cookie
  3. POST 请求被发送到生成 JSessionID cookie 的 Jhipster 后端应用程序
  4. 然后,JSessionID 用于对受支持应用程序的每个请求。

如果用户已经登录域 (*.domain.tld) 的应用程序之一,自动登录用户(不询问用户名和密码)的最佳方式是什么?

在理解它只适用于生成它的应用程序之前,我尝试将 JSessionID 用作全局 token ......

也许捕获 Keycloak 身份验证 cookie(在第 2 步返回)并在第二个应用程序上进行身份验证就可以解决问题?

从我在测试时看到的情况来看,在第一个应用程序上通过身份验证后,当我转到第二个应用程序时,Angular 401 HTTP 拦截器使用 session token 重定向到 keycloak 登录页面。因此那时 Keycloak 应该看到我已经登录并且应该将我重定向到我的第二个应用程序的主页。

我说得对吗?

最佳答案

javascript adapter通过创建 iframe 来解决这个问题这是从身份验证服务器加载的。

来自keycloak docs :

Session Status iframe

By default, the JavaScript adapter creates a hidden iframe that is used to detect if a Single-Sign Out has occurred. This does not require any network traffic, instead the status is retrieved by looking at a special status cookie. This feature can be disabled by setting checkLoginIframe: false in the options passed to the init method.You should not rely on looking at this cookie directly. Its format can change and it’s also associated with the URL of the Keycloak server, not your application.

init 函数的成功回调有一个参数,给出用户的身份验证状态。

<script src="keycloak.js"></script>
<script>
var keycloak = Keycloak();
keycloak.init().success(function(authenticated) {
alert(authenticated ? 'authenticated' : 'not authenticated');
}).error(function() {
alert('failed to initialize');
});
</script>

如果用户已通过身份验证,则将用户重定向到登录页面,因为用户已经通过身份验证,因此无需再次输入登录凭据。如果使用 onload 选项 check-sso

进行初始化,适配器可以自动处理此问题

有关 javascript 适配器内部工作的更多详细信息,可以找到源代码 here

关于java - 使用 Keycloak SSO 在 2 个应用程序之间保持身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53839769/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com