19-JWT令牌认证技术

JWT令牌认证技术

Java Web Token (全称)

专门用来替换:Cookie + Session的应用状态管理方式,通常适合前后端分离的项目

**应用程序的状态:**后端服务器和浏览器相互识别的内容

传统应用状态管理的缺陷
先问个问题

大家在2,3阶段学习时,我们怎么样去管理应用程序的状态?

后端服务器Tomcat如何知道你发的请求是你的浏览器发的,它不是其它浏览器发的?

答案:Cookie +Session

缺陷
  1. 前端只能是浏览器或者有Cookie的前端技术
  2. 应用程序的服务器在横向扩展时,需要进行Session同步
  3. 不适合做前后端分离的项目
具体原因

**目前的前端(大前端)包含:**各种浏览器,各种手机APP,各种应用小程序,还有其他的设备但上述的这些前端技术中,Cookie是浏览器所特有的

JWT解决方案
JWT的流程

后端通过JWT的技术,可以生成一个Token令牌的东西,生成出来之后,交给前端,要求前端进行存储,前端的每次请求需要携带该Token令牌到后端来识别

image-20210105142409011

JWT的组成

JWT由3段信息构成:头(header)、载荷(payload)、签证(signature)

头(header)、载荷(payload) 采用Base64位加密方法,签证(signature)使用HMACSHA256进行加密运算。

标准案例:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.
TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
头(Header)

主要承载2部分内容:声明Token使用JWT技术产生,声明加密的算法 通常直接使用 HMACSHA256

完整头的JSON格式:

{
  'typ': 'JWT',
  'alg': 'HS256'
}

头的内容是固定的,不会发生变化

它对应的字符串是:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
载荷(payload)

后端通过JWT承载,传递给前端有用的相关数据

组成载荷的2个部分:标准中注册的声明,其它的声明

标准中注册的声明(建议但不强制):

iss: jwt签发者

sub: jwt所面向的用户

aud: 接收jwt的一方

exp: jwt的过期时间,这个过期时间必须要大于签发时间

nbf: 定义在什么时间之前,该jwt都是不可用的

iat: jwt的签发时间

jti: jwt的唯一身份标识,主要用来作为一次性token,从而回避重放攻击。

其它的声明

载荷中,可以申明上述的标准信息,也可以附加一些个人信息(个人信息有的是公共的,有的是私有的)

备注:不管是公共的,还是私有的,由于载荷使用Base64位算法,都是可以破解的

其它的声明,不要写一些非常敏感的信息,例如:银行卡卡号,银行卡密码,登录名,登录密码……

签证(signature)

签证由3部分构成

header (base64加密后的内容)

payload (base64加密后的内容)

secret 盐值

将以上3部分内容使用:HMACSHA256算法进行加密

ture)

签证由3部分构成

header (base64加密后的内容)

payload (base64加密后的内容)

secret 盐值

将以上3部分内容使用:HMACSHA256算法进行加密

保证令牌颁发的权威性!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值