0

我希望 Keycloak (1.4.0) 将用户选择的语言环境包含到 ID 令牌中。

我已经创建了一个用户属性映射器,它应该将语言环境属性映射到令牌,但它不起作用。

有人知道怎么做这个吗?

提前致谢。

编辑:我从这个课程中学到了我所知道的关于 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

4

2 回答 2

4

我已经设法自己解决了这个问题。我最终使用了 Keycloak JS 适配器的 loadUserProfile() 函数。它将所有用户属性(包括语言环境)加载到 keycloak.profile 对象中,因此我不必配置任何映射器。

于 2015-10-05T18:08:46.353 回答
3

我想你已经有了这样的东西:

  1. 打开您领域的管理控制台。
  2. 转到客户并选择您的客户
  3. 这仅适用于“设置”>“访问类型”机密或公开(不限于不记名)
  4. 转到映射器
  5. 创建从您的属性到 json 的映射
  6. 选中“添加到 ID 令牌”

要访问映射的声明,您可以使用以下内容:

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(...);
}

希望这有助于并适合您的用例。我将此用于添加自定义主题的自定义属性。

于 2015-10-01T14:13:00.997 回答