本文讲解微服务中基于自定义用户中心如何实现JWT认证
笔记对应学习视频:
https://www.itlaoqi.com/chapter/2668.html
Web应用去状态化设计
- 微服务体系下避免服务出现状态,在负载均衡分配下,如果登录用户等信息存在服务节点Session中,会产生会话一致性问题
- 解决会话一致性的三种方案
- Session复制
- 代码零更改
- 依托Tomcat特性实现
- 少量节点下可以使用
- 多节点下复制性能指数下降
- 内存浪费严重
- Session复制
-
- 后端统一存储
- 快速部署,技术成熟
- 支持高并发,不存在一致性问题
- 增加新的通讯,架构复杂性增加
- 应用场景
- 传统大集群应用的升级改造
- 后端统一存储
-
- 客户端存储
- 服务端完全无状态
- 无需添加任何额外组件,架构复杂性降低
- 程序改造大
- 信息泄露问题
- 每次请求包含会话数据,占用带宽
- 典型方案: Json Web Token(JWT)
- 应用场景:
- 前后端分离,微服务架构
- 客户端存储
微服务认证方案设计
处理过程
- 1.用户在客户端输入用户名/密码等身份信息,通过微服务网关转发到认证中心进行用户信息的验证,如验证通过,认证中心会返回给客户端Token令牌
- a.Token是一个可以被加密/解密的、包含用户信息的、有时效性的字符串
- b.例如:
- 2.客户端获取到Token就认为用户登录成功,并将Token保存在客户端本地,之后每一次发送请求是将Token附加在请求Header/Cookie中发往后端微服务
- 3.微服务收到客户端请求后,第一件事便是对Token进行验证有效性
- a.验证通过提取Token中包含的用户信息进行后续业务处理
- b.验证失败直接返回Token异常信息.
架构风险
- 如果Token在传输过程中被劫持,会存在被冒名顶替的风险
- 增加底层网络安全性,使用SSL提高网络传输安全性,客户端要求安装防火墙/木马与病毒扫描软件
- 每个微服务都要持有解密用的秘钥字串,如秘钥字串失窃,关键信息会被泄露
- 引入配置中心,集中对秘钥等敏感信息统一管理