zoukankan      html  css  js  c++  java
  • Spring Security OAuth2 之token 和 refresh token

    本文梳理oauth2登录,刷新,注销对内存中token和refresh token的操作,同时提供客户端使用token的方案。

    一、Spring Security OAuth2提供操作token的接口:

     

    接口
    grant_type参数 说明
    类DefaultTokenServices
    /oauth/token password 登录获取token
    方法createAccessToken
    /oauth/token refresh_token 刷新token
    方法refreshAccessToken
    /auth/revokeToken自定义   自定义注销
    方法revokeToken

    继续参考下一个表对DefaultTokenServices详细说明

     

    二、类DefaultTokenServices

     

    本质上是DefaultTokenServices类对token和refresh token的操作,所以梳理这个类就可以。

    针对一个client and username

     

    方法

    规则

    等录createAccessToken方法

      1. 如果存在token,则更新用户信息,复用原来token/refresh token,时间继续计算,直接返回token(这里客户端无法判断refresh token过期时间)

      2. 如果存在token,刚好过期,则重新生成token, 复用原来refresh token, 所有时间重新计算;

      3. 如果不存在token,则新生成token/refresh token , 时间也是新的;

    刷新refreshAccessToken方法

        1. 如果不存在或者过期refresh token,抛出异常/客户端返回403;

        2. 如果存在refresh token, 删除所有旧的相关token, 生成新的token(新时间)

        3. 判断是否复用refresh token, 复用则不重新生成refresh token; 不复用, 则新生成refresh_token, 时间也刷新

     

    注销revokeToken方法

      1. 查询token存在时候, 删除token/refresh token;

      2. 查询token不存在时候, 不进行操作;

    注意:在公众号回复关键字:token 

    可以获取更多资料

    三、客户端使用token步骤

    业务方服务端使用token方案:(token设置有效期30天,refresh token有效期大于30天/如果永久有效有风险)

    以下是处理token步骤:

    1. 登录获取token和refresh token

    {    

    "access_token": "5427cac5-9e00-4e01-8cec-b4d36ca7d5fa",


    "token_type": "bearer",


    "refresh_token": "c169fcc7-4f75-497d-8f6b-4862f5a36d18",


    "expires_in": 5,


    "scope": "write api"

    }

    2. 在token有效期内, 用refresh token刷新token获取新token

    {    

    "access_token": "66cd5f7c-9b38-4261-9871-595f9748f6b6",

    "token_type": "bearer",


    "refresh_token": "c169fcc7-4f75-497d-8f6b-4862f5a36d18",


    "expires_in": 9,


    "scope": "write api"

    }

    3. 如果refresh token 刷新token时候403, 则进行第1步登录获取token和refresh token

     http status 403 Forbidden

    {

    "code": 400,


    "message": "Invalid refresh token: c169fcc7-4f75-497d-8f6b-4862f5a36d19",


    "data": null

    }
  • 相关阅读:
    Git从入门到放弃
    Flex布局
    网络模型与TCP协议
    命令行技巧
    React环境搭建及部署
    Vue环境搭建及部署
    Python 集合set()
    Python-100天代码
    删除Windows启动管理器下的加载项
    windos7操作系统下easyBCD2.3安装Ubuntu18.04.1-desktop-amd64.iso双系统
  • 原文地址:https://www.cnblogs.com/huangchanghuan/p/12872774.html
Copyright © 2011-2022 走看看