Spring-cloud学习笔记---分布式架构统一认证主流实现方案JWT简介

Spring-cloud学习笔记—分布式架构统一认证主流实现方案JWT简介

1.JWT改造统⼀认证授权中⼼的令牌存储机制前的思考

  1. 当我们第⼀次登陆之后,认证服务器颁发token并将其存储在认证服务器中,后期我们访问资源服务器时会携带token,资源服务器会请求认证服务器验证token有效性,如果资源服务器有很多,那么认证服务器压⼒会很⼤
  2. 另外,资源服务器向认证服务器check_token,获取的也是⽤户信息UserInfo,能否把⽤户信息存储到令牌中,让客户端⼀直持有这个令牌,牌的验证也在资源服务器进⾏,这样避免和认证服务器频繁的交互
  3. 我们可以考虑使JWT进⾏改造,使⽤JWT机制之后资源服务器不需要访问认证服务器
  4. 在引入OAuth2的starter的时候,JWT就已经以来过来了

2. JWT令牌的介绍

  1. 通过上边的测试我们发现,当资源服务和授权服务不在⼀起时资源服务使⽤RemoteTokenServices远程请求授权 服务验证token,如果访问量较⼤将会影响系统的性能。
  2. 解决上边问题: 令牌采⽤JWT格式即可解决上边的问题,⽤户认证通过会得到⼀个JWT令牌JWT令牌中已经包括了⽤户相关的信 息,客户端只需要携带JWT访问资源服务,资源服务根据事先约定的算法⾃⾏完成令牌校验,⽆需每次都请求认证 服务完成授权。

3. 什么是JWT

  1. JSON Web Token(JWT)是⼀个开放的⾏业标准(RFC 7519),它定义了⼀种简介的、⾃包含的协议格式,⽤于 在通信双⽅传递json对象,传递的信息经过数字签名可以被验证和信任。JWT可以使⽤HMAC算法或使⽤RSA的公钥/私钥对来签名,防⽌被篡改。

4. JWT令牌结构

  1. JWT令牌由三部分组成,每部分中间使⽤点(.)分隔,⽐如:xxxxx.yyyyy.zzzzz
  2. Header:头部包括令牌的类型(即JWT)及使⽤的哈希算法(如HMAC SHA256或RSA)
    {
    	"alg": "HS256",
    	"typ": "JWT"
    }
    
  3. Payload:第⼆部分是负载,内容也是⼀个json对象,它是存放有效信息的地⽅,它可以存放jwt提供的现成字段,⽐如:iss(签发者),exp(过期时间戳), sub(⾯向的⽤户)等,也可⾃定义字段。 此部分不建议存放敏感信息,因为此部分可以解码还原原始内容。 最后将第⼆部分负载使⽤Base64Url编码,得到⼀个字符串就是JWT令牌的第⼆部分。
    {
    	"sub": "1234567890",
    	"name": "John Doe",
    	"iat": 1516239022
    }
    ``
    
  4. Signature:第三部分是签名,此部分⽤于防⽌jwt内容被篡改。 这个部分使⽤base64url将前两部分进⾏编码,编码后使⽤点(.)连接组成字符串,最后使⽤header中声明签名算法进⾏签名。
    HMACSHA256(
    	base64UrlEncode(header) + "." +
    	base64UrlEncode(payload),
    	secret)
    
    base64UrlEncode(header):jwt令牌的第⼀部分。
    base64UrlEncode(payload):jwt令牌的第⼆部分。
    secret:签名所使⽤的密钥。
第三部分Signature是防止篡改的,即使我们知道第一部分和第二部分的值,并且进行相同的机密算法后,但是我们不知道secret的值,所以会防止被篡改

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值