Bio*_*eek 5 java spring-security single-sign-on jhipster keycloak
我有 2 个 JHipster 应用程序,每个应用程序都在一个子域(app1.domain.tld 和 app2.domain.tld)上运行。
在这两个应用程序中,用户都通过 Keycloak 登录。顺序如下:
如果用户已经登录域(*.domain.tld)的应用程序之一,自动登录用户(无需询问用户名和密码)的最佳方式是什么?
在了解 JSessionID 仅适用于生成它的应用程序之前,我尝试使用 JSessionID 作为全局令牌...
也许捕获 Keycloak 身份验证 cookie(在步骤 2 中返回)并在第二个应用程序上进行身份验证就可以解决问题?
从我在测试时看到的情况来看,在第一个应用程序上进行身份验证后,当我转到第二个应用程序时,Angular 401 HTTP 拦截器会使用会话令牌重定向到 keycloak 登录页面。因此,那时 Keycloak 应该看到我已经登录,并且应该将我重定向到我的第二个应用程序的主页。
我对吗 ?
javascript 适配器通过创建iframe解决了这个问题从身份验证服务器加载的
\n来自keycloak 文档:
\n\n\n会话状态 iframe
\n默认情况下,JavaScript 适配器会创建一个隐藏的 iframe,用于检测是否发生单点注销。这不需要任何网络流量,而是通过查看特殊状态 cookie 来检索状态。可以通过在传递给 init 方法的选项中设置 checkLoginIframe: false 来禁用此功能。您不应依赖于直接查看此 cookie。它的格式可以改变,并且它\xe2\x80\x99s也与Keycloak服务器的URL相关联,而不是与你的应用程序的URL相关联。
\n
init 函数的成功回调有一个参数,该参数给出用户的身份验证状态。
\n<script src="keycloak.js"></script>\n<script>\n var keycloak = Keycloak();\n keycloak.init().success(function(authenticated) {\n alert(authenticated ? \'authenticated\' : \'not authenticated\');\n }).error(function() {\n alert(\'failed to initialize\');\n });\n</script>\nRun Code Online (Sandbox Code Playgroud)\n如果用户通过身份验证,则将用户重定向到登录页面,因为用户已经通过身份验证,因此无需再次输入登录凭据。如果适配器使用 onload 选项初始化,则可以自动处理此问题check-sso
有关 javascript 适配器内部工作原理的更多详细信息,可以在此处找到源代码
\n| 归档时间: |
|
| 查看次数: |
9103 次 |
| 最近记录: |