Keycloak将自定义属性检索到KeycloakPrincipal

时间:2015-09-20 11:30:18

标签: authentication jboss customization principal keycloak

在我的休息服务中,我可以在使用

进行身份验证后获取主要信息
KeycloakPrincipal kcPrincipal = (KeycloakPrincipal) servletRequest.getUserPrincipal();

语句。

Keycloak校长并没有提供有关经过身份验证的用户所需的所有信息。 是否可以自定义我自己的主体类型? 在keycloak-server-end上我开发了一个用户联合提供程序。我看到UserModel可以为我的用户添加一组自定义属性。

是否可以在该代码中插入我的自定义主体?

是否可以从keycloak principal检索此属性?

是什么方式?

2 个答案:

答案 0 :(得分:53)

要添加自定义属性,您需要做三件事:

  1. 向管理控制台添加属性
  2. 添加声明映射
  3. 访问权利要求
  4. 第一个在这里解释得非常好:https://www.keycloak.org/docs/latest/server_admin/index.html#user-attributes

    添加声明映射:

    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 :(得分:19)

  • 选择用户&gt;查找&gt;点击ID&gt;转到属性标签&gt;添加属性&gt;例如:电话&gt;保存 enter image description here

  • 选择客户&gt;点击客户ID&gt;转到Mappers选项卡&gt;创建映射器

    enter image description here

    enter image description here

    enter image description here

  • 获取自定义属性

    enter image description here

    enter image description here