Day916.基于JWT令牌的安全认证架构 -SpringBoot与K8s云原生微服务实践
基于JWT令牌的安全认证架构
Hi,我是阿昌
,今天学习记录的是关于基于JWT令牌的安全认证架构
的内容。
之前的微服务阶段2.5阶段,其实是比较重量级的安全认证架构。
用户的登录状态集中存储在authService鉴权服务系统上面,客户端每次请求都需要去authService上集中认证鉴权校验,这种架构适合对安全要求严格的微服务场景,比方电商等情况。
但也有缺陷,就是当网址访问请求量较大时,就对authService的处理压力就较大要求,可能会成为性能和扩展性的瓶颈,要严格的HA和监控,投入成本就很高。
但如果应用不需要严格的安全集中型校验,那2.5阶段这套就会显的很笨重。
一、2.6阶段-JWT+网关
那在上面这种情况下就可以采用基于JWT令牌这种无状态的
的安全认证架构。
下面给出了一个基于JWT + 网关的的2.6的架构。
与2.5阶段最主要的区别在于:
- authService在第二步所颁布的令牌是JWT令牌,而非是Token令牌,JWT令牌与上面的Token透明令牌不同,他是包含数据信息的。
- 因为JWT令牌是自包含数据的,所以在第四步和第五部,网关可以自己去解析JWT令牌,而非需要去请求authService去认证授权校验,网关就可以从JWT令牌取出标识信息,就可以向后面的微服务中传递用户信息。
JWT令牌有点类似与之前的1.0阶段的无状态session,针对微服务的延伸发展出来的技术,这种架构针对authService鉴权服务做出了优化和改进,大大减少了authService鉴权服务的压力,增加了可扩展的架构,适用于安全架构不会要求这么强烈强的系统应用架构。
二、JWT令牌架构
JWT 代表(JSON Web Token),是一种用于安全地传输信息的开放标准。
JWT是一种基于JSON的令牌,它包含了一些声明和数据,用于在客户端和服务器之间传输信息。
通常情况下,JWT用于身份验证和授权目的。
JWT令牌由三个部分组成:头部、有效载荷和签名。头部包含令牌的元数据,例如令牌类型和签名算法。
有效载荷包含令牌的声明和数据,例如用户ID和过期时间。签名使用私钥对令牌进行加密,以确保令牌在传输过程中没有被篡改。
JWT令牌的主要优点是它们是轻量级且易于使用的,因此非常适合在分布式系统中进行身份验证和授权。
由于JWT令牌是自包含的,因此不需要使用数据库或其他持久存储来验证令牌。只需解析JWT令牌并验证签名即可。
总的来说,JWT令牌是一种简单、安全和灵活的身份验证和授权解决方案,可以在不同的应用程序和服务之间使用。
组装公式:
三、JWT的登录认证流程
JWT的登录认证流程有两种:HMAC流程 和 RSA流程
1、HMAC流程
authService 和 ResourceService需要一开始协商后一个用于解签的secret
- 用户向authService发出登录认证请求
- authService校验登录密码,通过后就根据某种HMAC算法和secret生成签名生成JWT令牌,并发送响应会客户端, 客户端收到JWT令牌后一般会在本地进行存储
- 客户端收到JWT令牌后就会向携带JWT令牌调用ResourceService的API请求
- 资源服务器ResourceService接受到客户端请求来的JWT令牌的API请求,就取出JWT令牌,采用和authService一开始协商好的secret对传客户端传来的JWT令牌进行校验解签,通过就执行后续业务逻辑,不通过就拒绝请求,校验过程中可以根据JWT令牌中的数据进行校验,最后响应客户端。
authService和ResourceService一开始协商好的secret要求严格存储,不允许泄露,如果泄露的话,整个流程就不再安全,黑客就可以利用secret伪造JWT令牌。
2、RSA流程
RSA流程基本跟上面的HMAC流程相似,但主要的区别在于authService采用的私钥
进行加密,而ResourceService采用公钥
进行解签。
RSA流程总体会比上面的HMAC流程更加的安全,因为authService保存的私钥泄露的概率会比ResourceService的私钥泄露概率要小。
公钥本身就可以进行公开,拿到公钥的意义就是对JWT令牌进行解签校验,不能进行篡改和加签。
四、JWT令牌的优劣
JWT (JSON Web Token) 是一种在网络应用之间传递信息的安全方式,通过使用 JSON 对象作为负载将信息存储在令牌中,并使用签名来保证令牌的完整性和验证身份。
1、优点:
- 无需保存会话状态,降低了authService鉴权服务器负载,因为 JWT 本身包含了所有必要的信息,可以在多个应用之间轻松传递。
- 可以轻松添加额外的用户信息,如用户 ID、角色等,因为 JWT 使用 JSON 对象作为负载。
- 可以使用签名来保证令牌的完整性和验证身份,从而减少了恶意攻击的风险。
2、缺点:
- 无法撤销令牌,一旦令牌被签发,除非到期时间到了,否则无法失效,即使用户已经注销了账号。
- 由于令牌中包含了所有必要的信息,如果令牌被窃取或泄露,攻击者可以获得所有这些信息。
- 如果使用不当,可能会导致安全问题,例如使用不安全的算法或密钥长度,或者在客户端存储令牌而不是在服务器端进行验证。
- 令牌携带数据过多时,会增加网络数据传输成本
相关文章
- iOS系统即将迎来升级,新功能备受欢迎,安卓用户只能干看着
- iOS15新功能来袭,让人惊喜让人忧,你们期待吗?
- 安卓8GB运存都表示卡顿了,为何苹果手机才4GB却一点不着急
- 谷歌大脑创始成员辞职,他也和Jeff Dean闹掰了
- 交互优化方案的流程是什么样的?来看高手的总结!
- B端设计师怎样发挥设计价值?来看京东高手的总结!
- Android 12现在有了设备搜索API 可用于第三方启动程序
- 10 年版权案终了结:美最高法院裁定谷歌安卓系统未侵权甲骨文 Java
- 谷歌地图大更新!AR导航转室内,机场商场不再难逛
- 苹果iOS系统隐藏的6个实用功能,不会用真是太浪费了
- iOS 14.5不再默认为女性语音 英语Siri新增两种声音
- 支付宝收钱码提现免费服务再延长 3 年,且不设单笔上限和单日上限
- 手机内存怎么删?这三种方式都可以实现,根据需求选择即可
- 图数据挖掘:小世界网络模型和分散式搜索
- 知识图谱实体对齐3:无监督和自监督的方法
- 谷歌准备发布 Fuchsia 首个开发者预览版
- 老年消费者吐槽扫码点餐:字太小 操作难
- 手机行业:关于手机的冷知识,这些你知道吗?
- 数值优化:经典随机优化算法及其收敛性与复杂度分析
- 数值优化:经典二阶确定性算法与对偶方法