基于Jwt的token的身份验证

 JWT

         Json Web Token ,是Token的一种实现方式,本质上是一条字符串。

Token

        Token的意思是“令牌”,简单说Token就是一种身份认证方式,基于Token的用户认证是一种无状态的认证方式。而所谓无状态指的是在服务端不需存储token数据或者登录用户信息,而是在客户端的每次请求时,携带在请求头里一起到达服务端,用户信息则存储在Token中,由服务器来解析Token以达到验证的目的。

无状态与有状态的对比

有状态:
        服务端存储用户信息(当然,只有用户已经登录过了才会在服务端存储信息)。

缺点:当用户量大时,服务端会存储大量的用户信息(无论是在Session域中还是Redis中),会给服务端带来很大的存储压力。

优点:存储在服务端数据很安全(因为服务器是很难攻破的,而请求是可以被抓包的)。

无状态:
        服务端不存储用户信息,而是每次请求中携带Token (服务器不知道用户有没有登录,只能每次都通过解析Token获取用户信息)。

缺点:容易被截获,一旦Token的密钥泄露,客户端则可以任意访问服务端。

优点:节省服务端存储,支持跨域。

JWT结构

JWT由三部分组成,分别是标头(Header)、载荷(payload)、签名(Signature)

分别解析这三部分都是什么:

Header标头
是一个Json对象,用来描述JWT元数据,存储alg(签名算法),type(Token类型)等信息

 Header Json对象会以Base64Url编码方式编译成字符串。

 

Payload载荷
        主体内容部分,也是一个Json对象,Payload主要承载了一些用户信息,例如用户Id。Payload的Json对象也是通过Base64Url编码方式编译成字符串。

注意:因为Base64Url编码是著名的防君子不防小人,所以并不建议在Payload中存储用户的敏感信息

Signature签名
        该部分是将前两部分Base64Url编码后的字符串,用 "." 拼接在一起后,再使用Header中记录的签名算法进行加密产生第三条字符串。

        Signature的作用是使用不可逆的加密算法来保存前两部分的信息,目的是校验JWT是否被修改过。

        三条字符串以 "." 拼接后就组成了一条完整的JWT。这种结构,既保证了JWT的不会被篡改,又易扩展(可以携带用户信息)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值