我希望Keycloak(1.4.0)将用户选择的区域设置包含在ID令牌中。
我已经创建了一个用户属性映射器,它应该将locale属性映射到令牌,但它不起作用。
有人知道怎么做吗?
提前致谢。
编辑:我从这个课程中学到了我所知道的abput Keycloak语言环境: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
答案 0 :(得分:3)
我想你已经有类似的东西:
要访问映射的声明,请使用以下内容:
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(...);
}
希望这有助于并适合您的使用案例。我用它来添加自定义主题的自定义属性。
答案 1 :(得分:2)
我已经设法自己解决了这个问题。我最终使用了Keycloak JS适配器的loadUserProfile()函数。它将所有用户属性(包括语言环境)加载到keycloak.profile对象中,因此我不必配置任何映射器。