【问题标题】:Custom JWT respone in Spring sercuritySpring 安全性中的自定义 JWT 响应
【发布时间】:2019-12-06 03:21:14
【问题描述】:

我使用 API oauth/token 在 spring sercurity oauth2 中获取 JWT 令牌。我尝试通过使用 TokenEnhancer 接口的增强方法 ((DefaultOAuth2AccessToken) accessToken).setAdditionalInformation(additionalInfo) 在响应中添加一些附加信息。但是这些附加信息也添加到了 JWT 中,所以它太大了。有什么方法可以将附加信息添加到 oauth/token 请求的正文中,而不是在 JWT 中。

@Override
public OAuth2AccessToken enhance(OAuth2AccessToken accessToken, OAuth2Authentication authentication) {
    final Map<String, Object> additionalInfo = new HashMap<>();
    WebUser webUser = (WebUser) authentication.getUserAuthentication().getPrincipal();
    additionalInfo.put("user_name", authentication.getName());
    additionalInfo.put("roles", authentication.getAuthorities());
    if(webUser.getFunctions() != null) {
        additionalInfo.put("functions",  webUser.getFunctions().toString());
    }else {
        additionalInfo.put("functions",  null);
    }

    ((DefaultOAuth2AccessToken) accessToken).setAdditionalInformation(additionalInfo);
    return accessToken;
}

【问题讨论】:

    标签: oauth-2.0 jwt spring-security-oauth2


    【解决方案1】:

    当你修改一个token时,它在Spring上下文中被称为“enhancing the token”。从逻辑上讲,您应该首先将令牌转换为 JWT,然后添加其他属性,以免它们对您的 JWT 有效负载产生影响。

    这是我使用 Spring Boot 构建的项目中的一个 sn-p

     @Override
        public void configure(final AuthorizationServerEndpointsConfigurer endpoints) {
            TokenEnhancerChain tokenEnhancerChain = new TokenEnhancerChain();
            tokenEnhancerChain.setTokenEnhancers(
                    Arrays.asList(tokenEnhancer(), jwtAccessTokenConverter()));
    
            endpoints.authenticationManager(authenticationManager)
                    .userDetailsService(userDetailsService)
                    .tokenEnhancer(tokenEnhancerChain)
                    .accessTokenConverter(jwtAccessTokenConverter())
                    .tokenStore(tokenStore());
        }
    

    在这里,我使用tokenEnhancer() 向我的令牌添加一些属性,然后使用jwtAccessTokenEnhancer() 增强该令牌以成为JWT。如果我在这里颠倒顺序,我会得到你想要的。

    【讨论】:

      猜你喜欢
      • 2021-07-14
      • 2017-07-04
      • 2014-10-23
      • 2015-12-06
      • 2016-03-29
      • 2020-07-19
      • 2011-02-10
      • 1970-01-01
      • 2020-05-27
      相关资源
      最近更新 更多