【问题标题】:Include user locale to the Keycloak ID token在 Keycloak ID 令牌中包含用户区域设置
【发布时间】:2015-12-18 05:24:07
【问题描述】:

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

【问题讨论】:

    标签: javascript locale keycloak


    【解决方案1】:

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

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

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

    【讨论】:

    • 我已经尝试过了,但问题是无法以这种方式访问​​语言环境,所以我必须使用用户配置文件。
    • 我确实按照你的建议,但我只得到一个空 IDToken。但是,将数据添加到访问令牌中是可行的,然后我可以从那里获取它。这是 spring-security 4.0 和 keycloak 1.7
    • 这很奇怪。即使没有自定义变量,您也应该得到标准的 IdToken 而不是 null。
    【解决方案2】:

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

    【讨论】:

    • 现在可以正常工作了。我使用了自定义属性,显然配置文件属性的处理方式不同:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-31
    • 1970-01-01
    • 2018-03-25
    • 1970-01-01
    • 2019-07-01
    • 2021-04-19
    • 2018-09-09
    相关资源
    最近更新 更多