spring Oauth2 之旅:之DefaultTokenService解析

        引文:DefaultTokenService作为oauth2中操作token(crud)的默认实现,在oauth2框架中有着很重要的地位。   本文主要讲解其基于redis的方式实现。

        一. 首先,DefaultTokenService中持有TokenStore接口用于保存token。用redis保存可使用redisTokenStore。

        二. token的种类:在产生token的过程中会产生以下几种类型的token:                                                                                                 1.Access(key为access+oauth通过uuid生成的token字符串,对应的value为OAuth2AccessToken,checktoken时会用到) .

    2.Auth(key为Auth+oauth通过uuid生成的token字符串,对应的value为OAuth2Authentication(包含pricipal(name),criedtials,Authorities(权限)),checktoken时会用到) 

           3.Auth_to_access(key是name和client_id通过md5加密生成的字符串,对应的value为OAuth2AccessToken,请求token时会用到)                                                                                                                                                                                                             4.Refresh_to_access(key为refreshtoken的值,value为accesstoken的值,刷新token时用于通过refreshtoken找到accesstoken的桥梁,一遍删除老的accesstoken)                                                                                                                                           

          5.Access_to_Refresh(key为accesstoken的值,value为refreshtoken的值)     

         6.Refresh(key为refresh+oauth通过uuid生成的refreshtoken字符串,对应的value为OAuth2RefreshToken,refreshtoken时会用到)                                                                                                                                                                                                         7.Refresh_Auth(key为refresh_auth+oauth通过uuid生成的refreshtoken字符串,对应的value为OAuth2Authentication,refreshtoken时会用到)

       三.createAccessToken解析:                                                                                                                                                               1.首先读取Auth_to_access(申请token时会传来name和client_id,通过MD5加密得到Auth_to_access的key,从而获取到OAuth2AccessToken)                                                                                                                                                                                     

       2.如果OAuth2AccessToken不存在,说明缓存中不存在token。这时需进行一系列产生token的步骤。首先.生成OAuth2RefreshToken和OAuth2AccessToken(OAuth2RefreshToken设置在其内部)。然后调用tokenStore的storeAccessToken方法,存储Access,存储Auth,存储Auth_to_access,存储Refresh_to_access,存储Access_to_Refresh。接着再调用tokenStore的storeRefreshToken方法,存储Refresh,存储Refresh_Auth。                                                                                                                               

       3.接上第一步,如果OAuth2AccessToken存在(且未过期),直接返回改token。 

       四.check token解析: 

   1.首先读取ACCESS的OAuth2AccessToken,然后再读取Auth的OAuth2Authentication,最后通过accessTokenConverter将OAuth2Authentication中的user信息提取出来。

      五.refresh token解析:                                                                                                                                                                        1.1首先读取refresh的OAuth2RefreshToken。

      2.通过refresh获取refresh_auth的OAuth2Authentication.

      3.通过refreshtoken获取Refresh_to_access的value(accesstoken的值)然后删掉该accesstoken。

      4.创建新的accessToken(上述步骤三)                                                     

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值