此文介绍了单点登录流程、JWT、token

本文会随着作者日常学习进行补充及内容修正


单点登录流程

  1. 根据用户名查找
  2. 如果为null,就是用户不存在
  3. 密码匹配,如果不匹配,就是密码不正确
  4. Jwt生成token
  5. 将token存入redis中,access token过期时间短,refresh_token过期时间长。

JWT组成

第一部分我们称它为头部(header)

第二部分我们称其为载荷(payload)。载荷就是存放有效信息的地方。

第三部分是签证(signature)

JWT生成的token是这样的

1
XXXXXX.XXXXXXX.XXXXXXX

生成的token,是3段,用.连接。

头部

用于描述关于该JWT的最基本的信息,例如其类型以及签名所用的算法等。这也可以被表示成一个JSON对象。
例如:

1
2
3
4
{
"typ": "JWT",
"alg": "HS256"
}

载荷

其实就是自定义的数据,一般存储用户Id过期时间等信息。也就是JWT的核心所在,因为这些数据就是使后端知道此token是哪个用户已经登录的凭证。而且这些数据是存在token里面的,由前端携带,所以后端几乎不需要保存任何数据。
例如:

1
2
3
4
{
"uid": "xxxxidid", //用户id
"exp": "12121212" //过期时间
}

签名

签名其实就是:
1.头部和载荷各自base64加密后用.连接起来,然后就形成了xxx.xx的前两段token。
2.最后一段token的形成是,前两段加入一个密匙用HS256算法或者其他算法加密形成。
3.所以token的3段形成就是在签名处形成的。


访问令牌(access token)和刷新令牌(refresh_token )

  • 当用户登录的时候,生成access_tokenrefresh_token,并返回给APP。

  • access_token是用于身份验证的。

  • access_token失效时,APP使用refresh_token来请求刷新token

  • 如果refresh_token过期,需要用户重新登录,

    也就是说,用户每一次登陆的时候refresh_token都会重新更改。

  • token的过期时间是分钟级别的。