单点登录
此文介绍了单点登录流程、JWT、token
本文会随着作者日常学习进行补充及内容修正
单点登录流程
- 根据用户名查找
- 如果为null,就是用户不存在
- 密码匹配,如果不匹配,就是密码不正确
- Jwt生成token
- 将token存入redis中,access token过期时间短,refresh_token过期时间长。
JWT组成
第一部分我们称它为头部(header)
第二部分我们称其为载荷(payload)。载荷就是存放有效信息的地方。
第三部分是签证(signature)
JWT生成的token是这样的
1 | XXXXXX.XXXXXXX.XXXXXXX |
生成的token,是3段,用
.
连接。
头部
用于描述关于该JWT的最基本的信息,例如其类型以及签名所用的算法等。这也可以被表示成一个JSON对象。
例如:
1 | { |
载荷
其实就是自定义的数据,一般存储用户Id
,过期时间
等信息。也就是JWT的核心所在,因为这些数据就是使后端知道此token是哪个用户已经登录的凭证。而且这些数据是存在token里面的,由前端携带,所以后端几乎不需要保存任何数据。
例如:
1 | { |
签名
签名其实就是:
1.头部和载荷各自base64加密后用.连接起来
,然后就形成了xxx.xx的前两段token。
2.最后一段token的形成是,前两段加入一个密匙用HS256算法或者其他算法加密形成。
3.所以token的3段形成就是在签名处形成的。
访问令牌(access token)和刷新令牌(refresh_token )
当用户登录的时候,生成
access_token
和refresh_token
,并返回给APP。access_token
是用于身份验证
的。当
access_token
失效时,APP使用refresh_token
来请求刷新token
。如果
refresh_token
过期,需要用户重新登录,也就是说,用户每一次登陆的时候refresh_token都会重新更改。
token的过期时间是分钟级别的。