将用户区域设置包含到 Keycloak ID 令牌中
Include user locale to the Keycloak ID token
我希望 Keycloak (1.4.0) 将用户选择的语言环境包含到 ID 令牌中。
我已经创建了一个用户属性映射器,它应该将语言环境属性映射到令牌,但它不起作用。
有人知道怎么做吗?
提前致谢。
编辑:我从这个 class 中学到了我对 Keycloak Locales 的了解:http://grepcode.com/file/repository.jboss.org/nexus/content/repositories/releases/org.keycloak/keycloak-forms-common-freemarker/1.2.0.Final/org/keycloak/freemarker/LocaleHelper.java#LocaleHelper.0LOGGER
我想你已经有了这样的东西:
- 打开您领域的管理控制台。
- 去客户和select你的客户
- 这仅适用于设置 > 访问类型机密或public(非承载)
- 转到映射器
- 创建一个从您的属性到 json
的映射
- 勾选"Add to ID token"
要访问映射的声明,您可以使用如下内容:
final Principal userPrincipal = httpRequest.getUserPrincipal();
if (userPrincipal instanceof KeycloakPrincipal) {
KeycloakPrincipal<KeycloakSecurityContext> kp = (KeycloakPrincipal<KeycloakSecurityContext>) userPrincipal;
IDToken token = kp.getKeycloakSecurityContext().getIdToken();
Map<String, Object> otherClaims = token.getOtherClaims();
if (otherClaims.containsKey("YOUR_CLAIM_KEY")) {
yourClaim = String.valueOf(otherClaims.get("YOUR_CLAIM_KEY"));
}
} else {
throw new RuntimeException(...);
}
希望这对您有所帮助并适合您的用例。我将其用于我添加自定义主题的自定义属性。
我已经设法自己解决了这个问题。我最终使用了 Keycloak JS 适配器中的 loadUserProfile() 函数。它将所有用户属性(包括语言环境)加载到 keycloak.profile 对象中,因此我不必配置任何映射器。
我希望 Keycloak (1.4.0) 将用户选择的语言环境包含到 ID 令牌中。
我已经创建了一个用户属性映射器,它应该将语言环境属性映射到令牌,但它不起作用。
有人知道怎么做吗?
提前致谢。
编辑:我从这个 class 中学到了我对 Keycloak Locales 的了解:http://grepcode.com/file/repository.jboss.org/nexus/content/repositories/releases/org.keycloak/keycloak-forms-common-freemarker/1.2.0.Final/org/keycloak/freemarker/LocaleHelper.java#LocaleHelper.0LOGGER
我想你已经有了这样的东西:
- 打开您领域的管理控制台。
- 去客户和select你的客户
- 这仅适用于设置 > 访问类型机密或public(非承载)
- 转到映射器
- 创建一个从您的属性到 json 的映射
- 勾选"Add to ID token"
要访问映射的声明,您可以使用如下内容:
final Principal userPrincipal = httpRequest.getUserPrincipal();
if (userPrincipal instanceof KeycloakPrincipal) {
KeycloakPrincipal<KeycloakSecurityContext> kp = (KeycloakPrincipal<KeycloakSecurityContext>) userPrincipal;
IDToken token = kp.getKeycloakSecurityContext().getIdToken();
Map<String, Object> otherClaims = token.getOtherClaims();
if (otherClaims.containsKey("YOUR_CLAIM_KEY")) {
yourClaim = String.valueOf(otherClaims.get("YOUR_CLAIM_KEY"));
}
} else {
throw new RuntimeException(...);
}
希望这对您有所帮助并适合您的用例。我将其用于我添加自定义主题的自定义属性。
我已经设法自己解决了这个问题。我最终使用了 Keycloak JS 适配器中的 loadUserProfile() 函数。它将所有用户属性(包括语言环境)加载到 keycloak.profile 对象中,因此我不必配置任何映射器。