避坑指南(七):Spring Cloud Oauth2配置JwtTokenStore后不生效,依然生成普通token

 

问题

授权服务器基于Spring Cloud Oauth2创建后,配置TokenStore为JwtTokenStore,访问/oauth/token接口,依然返回普通token,如下如所示。

避坑指南(七):Spring Cloud Oauth2配置JwtTokenStore后不生效,依然生成普通token_第1张图片

如图所示,生成的2个token,均不是jwt。

授权服务器Endpoints配置项内,配置TokenStore为JwtTokenStore,代码如下。

@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
    endpoints.authenticationManager(authenticationManager)
        .userDetailsService(userDetailsService)
        .allowedTokenEndpointRequestMethods(HttpMethod.GET, HttpMethod.POST)
        .tokenStore(new JwtTokenStore(jwtAccessTokenConverter()));
    ;
}

 

分析

查看TokenEndPoint中/oauth/token申请逻辑。

避坑指南(七):Spring Cloud Oauth2配置JwtTokenStore后不生效,依然生成普通token_第2张图片

由TokenGranter授权Token。而grant方法调用tokenServices创建Token。

避坑指南(七):Spring Cloud Oauth2配置JwtTokenStore后不生效,依然生成普通token_第3张图片

DefaultTokenServices创建token逻辑如下。

避坑指南(七):Spring Cloud Oauth2配置JwtTokenStore后不生效,依然生成普通token_第4张图片

如果accessTokenEnhancer存在,则做token增强,如果不存在,则返回普通token。回到问题之初,正是返回了普通token,所以,最大的可能便是此处的accessTokenEnhancer为空。

接下来,查看一下框架配置,重点探寻accessTokenEnhancer是如何初始化的,怎么能导致为空。

由于创建token逻辑是在DefaultTokenServices中,所以先查看一下DefaultTokenServices是如何创建的。

避坑指南(七):Spring Cloud Oauth2配置JwtTokenStore后不生效,依然生成普通token_第5张图片

其中,tokenEnhancer方法逻辑如下。

逻辑比较明显,如果tokenEnhancer为空,同时,此时的accessTokenConverter为JwtAccessTokenConverter时,tokenEnhancer便赋值为accessTokenConverter,即JwtAccessTokenConverter。但是此时,我们并没有配置accessTokenConverter。所以tokenEnhancer便为空。从而造成DefaultTokenServices中的token返回便会直接普通token。

 

解决

如上述分析,解决问题之关键在于,配置accessTokenConverter。配置如下:

@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
    endpoints.authenticationManager(authenticationManager)
        .userDetailsService(userDetailsService)
        .allowedTokenEndpointRequestMethods(HttpMethod.GET, HttpMethod.POST)
        .accessTokenConverter(jwtAccessTokenConverter())
        .tokenStore(new JwtTokenStore(jwtAccessTokenConverter()));
    ;
}

重启系统,再次访问授权接口,此时,已正常返回jwt类型的token。

避坑指南(七):Spring Cloud Oauth2配置JwtTokenStore后不生效,依然生成普通token_第6张图片

 

本文系【银河架构师】原创,如需转载请在文章明显处注明作者及出处。

微信搜索【银河架构师】,发现更多精彩内容。

技术资料领取方法:关注公众号,回复微服务,领取微服务相关电子书;回复MK精讲,领取MK精讲系列电子书;回复JAVA 进阶,领取JAVA进阶知识相关电子书;回复JAVA面试,领取JAVA面试相关电子书,回复JAVA WEB领取JAVA WEB相关电子书。

 

 

你可能感兴趣的:(微服务,#,Spring,Cloud)