API网关设计(叙)登陆逻辑流程

前言

a few days ago, somebody asked me about distributed login logic.
at that time i didn’t have time to explain in detail.
better late than never.
so,here we go .
分布式系统登陆其实没多复杂点,主要还是细节的把控

重点细节

  • token存储
  • 用户信息存储
  • 安全控制

实现方案

方案演变

单机系统的时候咱们常用session以及数据最多再加一个redis来实现登陆。
这一块感觉不用多说感觉大家应该都挺清楚
那么到了分布式架构的情况下又有何区别了?
首先session存储用户信息的方案已经不够用
其次登陆逻辑不该耦合在具体业务模块中了
最后多微服务情况下网关的存在所有不安全的请求该被网关拦截
根据上面的情况
现在咱们要做的其实和以前没多大区别只是把以前的一个整理拆分成各个模块来做。

方案实现

有很多小伙伴问我JWT什么的其实方案是灵活多变的,JWT也仅仅只是一种思路而已。
咱们学习任何一项技术学习的应该是背后的思想而不是具体实现
不然那永远是东施笑颦
如不知所以,然不知所来
如来~
划水够了,具体说说我具体的实现方案吧
使用会话凭证分级,登陆可以获取到永久token(其实也有过期时间只是比较长比如一个月),token可以换取临时会话temptoken(会话级token)
所以免登陆的方式是通过用户第一次用户名密码登陆的方式拿到token之后存储到客户端
下次再唤醒app或者web登录的时候直接拿token与服务端交互
服务端校验token有效性以及是否过期,通过token可以获取temptoken
综上token为了保证不丢失存储到数据库!
temptoken存储到redis
上面已经说了大的实现逻辑
咱们下面再聊聊细节
token与temptoken生成的加密算法以及密钥都是隔一段时间动态变化生成
这时候细心的小伙伴肯定会问如果我token没过期,但是算法和密钥变了这不就坑了嘛
当然会坑
所以咱们会比较token是否过期,没过期但是数据库或者redis有责刷新一个新的token放到报文里返回给客户端。
至于过期时间可以根据自己的业务场景具体选择实现,甚至可以每次请求都返回一个新的temptoken

方案时序图

API网关设计(叙)登陆逻辑流程_第1张图片
API网关设计(叙)登陆逻辑流程_第2张图片

欢迎扫码关注公众号,获取最新信息
API网关设计(叙)登陆逻辑流程_第3张图片

你可能感兴趣的:(API网关设计)