在我的休息服务中,我可以在使用
进行身份验证后获取主要信息KeycloakPrincipal kcPrincipal = (KeycloakPrincipal) servletRequest.getUserPrincipal();
语句。
Keycloak校长并没有提供有关经过身份验证的用户所需的所有信息。 是否可以自定义我自己的主体类型? 在keycloak-server-end上我开发了一个用户联合提供程序。我看到UserModel可以为我的用户添加一组自定义属性。
是否可以在该代码中插入我的自定义主体?
是否可以从keycloak principal检索此属性?
是什么方式?
答案 0 :(得分:53)
要添加自定义属性,您需要做三件事:
第一个在这里解释得非常好:https://www.keycloak.org/docs/latest/server_admin/index.html#user-attributes
添加声明映射:
访问声明:
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;保存
选择客户&gt;点击客户ID&gt;转到Mappers选项卡&gt;创建映射器
获取自定义属性