Spring Cloud OAuth2 资源服务器CheckToken 源码解析

CheckToken的目的

当用户携带token 请求资源服务器的资源时, OAuth2AuthenticationProcessingFilter 拦截token,进行token 和userdetails 过程,把无状态的token 转化成用户信息。

2718590-1f4d833c35eef197.png
image

详解

  1. OAuth2AuthenticationManager.authenticate(),filter执行判断的入口


    2718590-cfe4588df495a706.png
    image
  2. 当用户携带token 去请求微服务模块,被资源服务器拦截调用RemoteTokenServices.loadAuthentication ,执行所谓的check-token过程。
    源码如下

    2718590-87a7a36d9ba2d28f.png
    image

  3. CheckToken 处理逻辑很简单,就是调用redisTokenStore 查询token的合法性,及其返回用户的部分信息 (username )

2718590-981476a5a3c06712.png
image
  1. 继续看 返回给 RemoteTokenServices.loadAuthentication 最后一句
    tokenConverter.extractAuthentication 解析组装服务端返回的信息
2718590-b81a3da085c76207.png
image

最重要的 userTokenConverter.extractAuthentication(map);

  1. 最重要的一步,是否判断是否有userDetailsService实现,如果有 的话去查根据 返回的
    username 查询一次全部的用户信息,没有实现直接返回username,这也是很多时候问的为什么只能查询到username 也就是 EnablePigxResourceServer.details true 和false 的区别。
2718590-17974e6d3492ce63.png
image
  1. 那根据的你问题,继续看 UerDetailsServiceImpl.loadUserByUsername 根据用户名去换取用户全部信息。


    2718590-148543e22b62253f.png
    image

关于pig

基于Spring Cloud、oAuth2.0开发基于Vue前后分离的开发平台,支持账号、短信、SSO等多种登录,提供配套视频开发教程。
https://gitee.com/log4j/pig

猜你喜欢

转载自blog.csdn.net/weixin_33994444/article/details/86910845