【发布时间】:2021-10-30 05:14:09
【问题描述】:
我遇到了 Keycloak Java 适配器的问题。我尝试将桌面应用程序与 Keycloak 集成,并在其他一些 Web 应用程序之间启用 SSO。问题是,当我尝试登录 Keycloak 时,一切正常且顺利,我获得有关正确身份验证的信息,获取令牌,甚至可以毫无问题地解析它,但是在 WebBrowser 中没有创建会话(没有会话,没有 cookie) .这意味着我不能将刚刚创建的会话与同一 Keycloak 领域中的其他应用程序一起使用,即使 Keycloak 中的会话已正确创建。
在使用我的桌面适配器“成功”登录后,其他应用程序之前创建和存储的更多 cookie 也会被删除(作为 cookie,我的意思是 KEYCLOAK_IDENTITY 和 KEYCLOAK_INDENTITY_LEGACY)。当我检查浏览器 cookie 时,有一些警告声明说 cookie 因过期而被拒绝。
我使用的是 KeycloakInstalled 适配器(最新,15.0.2 版本)。我使用页面上的说明配置它:https://www.keycloak.org/docs/latest/securing_apps/
我认为本案例中最重要的一段代码:
KeycloakInstalled keycloak = new KeycloakInstalled();
AdapterConfig config = new AdapterConfig();
Map<String, Object> credentials = new HashMap<String, Object>();
credentials.put("secret", secret);
config.setAuthServerUrl(url);
keycloak.getDeployment().setRealm(realm);
keycloak.getDeployment().setAuthServerBaseUrl(config);
keycloak.getDeployment().setResourceName(resource);
keycloak.getDeployment().setResourceCredentials(credentials);
keycloak.getDeployment().setClientAuthenticator(ClientCredentialsProviderUtils.bootstrapClientAuthenticator(keycloak.getDeployment()));
keycloak.loginDesktop();
在这种情况下,一些 Keycloak 属性在 keycloak.json 文件中静态设置,而在 Java 中一些动态设置(上面的示例)。在 keycloak.json 文件中,一些属性如 realm、auth-server-url、resource 和 秘密充满了垃圾数据,只是因为它们是稍后动态设置的。
{
"realm": "<realm>",
"auth-server-url": "<url>",
"ssl-required": "external",
"resource": "<keycloak-client>",
"use-resource-role-mappings": true,
"credentials" : {
"secret" : "abc"
},
"truststore" : "<file>.jks",
"truststore-password" : "<password>"
}
Keycloak 的客户端配置我是这样设置的:
如何避免使用我的桌面适配器删除会话 cookie?
【问题讨论】:
标签: java cookies single-sign-on keycloak adapter