【问题标题】:Override UserAuthenticationConverter for JWT OAuth Tokens覆盖 JWT OAuth 令牌的 UserAuthenticationConverter
【发布时间】:2018-09-25 11:20:59
【问题描述】:

我正在尝试创建一个使用 oauth2 保护的 spring 资源服务器。

我将 auth0 用于我的 auth2 服务,并且我有一个配置了范围的 api 和客户端。

我有一个大部分可以工作的资源服务器。它是安全的,我可以使用 @EnableGlobalMethodSecurity 和 @PreAuthorize("#oauth2.hasScope('profile:read')") 来限制对具有该范围的令牌的访问。

但是,当我尝试获取 Principal 或 OAuth2Authentication 时,它们都为空。我已将资源服务器配置为使用 JWK key-set-uri。

我怀疑这与 DefaultUserAuthenticationConverter 试图从 JWT 读取“用户名”声明有关,但它需要从“子”声明中读取它,我不知道如何更改它行为。

【问题讨论】:

    标签: spring-security-oauth2 auth0


    【解决方案1】:

    首先创建一个UserAuthenticationConverter:

    public class OidcUserAuthenticationConverter implements UserAuthenticationConverter {
    
        final String SUB = "sub";
    
        @Override
        public Map<String, ?> convertUserAuthentication(Authentication userAuthentication) {
            throw new UnsupportedOperationException();
        }
    
        @Override
        public Authentication extractAuthentication(Map<String, ?> map) {
            if (map.containsKey(SUB)) {
                Object principal = map.get(SUB);
                Collection<? extends GrantedAuthority> authorities = null;
                return new UsernamePasswordAuthenticationToken(principal, "N/A", authorities);
            }
            return null;
        }
    }
    

    然后配置spring像这样使用它:

    @Configuration
    public class OidcJwkTokenStoreConfiguration {
        private final ResourceServerProperties resource;
    
        public OidcJwkTokenStoreConfiguration(ResourceServerProperties resource) {
            this.resource = resource;
        }
    
        @Bean
        public TokenStore jwkTokenStore() {
            DefaultAccessTokenConverter tokenConverter = new DefaultAccessTokenConverter();
            tokenConverter.setUserTokenConverter(new OidcUserAuthenticationConverter());
            return new JwkTokenStore(this.resource.getJwk().getKeySetUri(), tokenConverter);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-27
      • 2019-07-24
      • 2019-06-14
      • 2016-12-12
      • 2022-08-05
      • 2016-09-17
      • 2015-06-24
      • 2022-06-11
      相关资源
      最近更新 更多