将用户区域设置包含在Keycloak ID令牌

时间:2015-09-21 13:24:20

标签: javascript locale keycloak

我希望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

2 个答案:

答案 0 :(得分:3)

我想你已经有类似的东西:

  1. 打开您的领域的管理控制台。
  2. 转到客户并选择您的客户
  3. 这仅适用于设置>访问类型机密或公开(不仅仅是承载)
  4. 转到Mappers
  5. 创建从属性到json的映射
  6. 选中"添加到ID令牌"
  7. 要访问映射的声明,请使用以下内容:

    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对象中,因此我不必配置任何映射器。