【问题标题】:Keycloak custom attribute not fetched in the claims声明中未获取 Keycloak 自定义属性
【发布时间】:2021-03-31 09:32:52
【问题描述】:

我正在尝试以 Keycloak 声明的形式获取自定义属性 (phone_number)。我正在按照here 给出的步骤进行操作。以下是我执行的步骤的附加屏幕图。

  1. 为用户添加属性

  1. 协议映射器

  1. 协议映射器在客户端范围内可用 -> 评估上述客户端

我现在尝试在过滤器中访问此属性,如下所示。


public class FilterTest extends OncePerRequestFilter {
    
    public static final String PHONE_NUMBER = "phone_number";    

    public FilterTest() {
    }

    @Override
    protected void doFilterInternal(
            final HttpServletRequest request,
            final HttpServletResponse response,
            final FilterChain filterChain) throws ServletException, IOException {

        final Authentication authentication = SecurityContextHolder.getContext().getAuthentication();

        if( !AnonymousAuthenticationToken.class.isAssignableFrom(authentication.getClass()) ){
            Principal principal = (Principal) authentication.getPrincipal();
            if (principal instanceof KeycloakPrincipal) {
                KeycloakPrincipal<KeycloakSecurityContext> kp = (KeycloakPrincipal<KeycloakSecurityContext>) principal;
                AccessToken token = kp.getKeycloakSecurityContext().getToken();
                Map<String, Object> otherClaims = token.getOtherClaims();
                System.out.println("Phone number => "+otherClaims.get(PHONE_NUMBER); // null pointer
            }
        }    
        filterChain.doFilter(request, response);

    }

}

我尝试过的其他东西。

  1. 清除领域缓存。
  2. 添加内置电话号码协议映射器。

上述两个步骤对我来说也没有任何结果。

我不确定我在这里缺少什么。任何帮助表示赞赏。

【问题讨论】:

    标签: spring-boot spring-security keycloak


    【解决方案1】:

    Keycloak 将自定义属性中的一些常用字段直接映射到IDToken 类的字段。就我而言,电话号码是 IDToken 类中的一个字段,我试图从otherClaims 地图中获取它。以下是让我启动并运行的代码片段更改。

                    AccessToken token = kp.getKeycloakSecurityContext().getToken();
                    phoneNumber = token.getPhoneNumber();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-13
      • 2021-12-01
      • 2022-11-30
      • 1970-01-01
      • 2014-02-25
      • 2022-12-04
      • 2021-07-03
      • 2022-06-15
      相关资源
      最近更新 更多