(一)JsonWebToken是什么?

JSON Web Token 是一个开放标准协议,它定义了一种“紧凑”和“自包含”的方式,它用于各方之间作为JSON对象安全地传输信息。

紧凑:数据量较少,并且能通过url参数,http请求提交的数据以及http header的方式来传递。

自包含:这个串可以包含很多信息,比如用户ID,订单号ID等,如果被其他人拿到该信息,也就可以拿到关键业务信息。

(二)优点:

1. 可以适用于分布式的单点登录场景。

2. 可以使用跨域认证解决方案。

3. jwt实现自动刷新token的方案。

Token在计算机身份认证中是令牌(临时)的意思,在词法分析中是标记的意思。一般作为邀请、登录系统使用。

(三)基本原理

客户端 账号密码登录 请求 登录的接口

登录成功 服务器 用签名密钥 生成 JWT ==> JWT返回客户端

客户端 再一次 请求服务端 其他接口 请求头带上JWT

服务端 验证 JWT有效性后 对客户端作出相应的响应

 

客户端                                                服务器

        1.Post 登录(用户名/密码)

   ------------------------------------------------------------------------>>>

                          2.生成JWT

   <<<------------------------------------------------------------------------

        3.返回JWT给客户端

 

         4.再次访问服务器,请求头带着JWT

    ------------------------------------------------------------------------>>>

                              5.检查JWT,获取用户信息

    <<<------------------------------------------------------------------------

          6..向客户端发送响应

 

(四)基本数据结构

1.基本的JWT的数据结构  XXXXXXXXX.XXXXXXXXXXX.XXXXXXXXX

由三部分组成的,中间使用 . 分割

Header(头部).PayLoad(负载).Signature(签名)

 

1)Header

Header部分是一个JSON对象,描述JWT 元数据

 

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

 

alg属性表示签名的算法,默认是 HMAC SHA256 (缩写为:HS256)

 

typ属性表示这个令牌(token)的类型为JWT,最后将上面的JSON对象使用 Base64URL的算法转成字符串。

 

2)Payload

Payload部分也是一个JSON对象,用来存放实际需要传递的数据,官方提供了7个字段
iss(issuer): 签发人

exp (expiration time): 过期时间

sub (subject): 主题

aud (audience): 受众

nbf (Not Before): 生效时间

iat (Issued At): 签发时间

jti (JWT ID): 编号

 

ayload中文含义是载荷,它可以理解为存放有效信息的地方。这些有效信息一般包含三个部分

标准中注册的声明:(就是官方提供的7个字段)。

公共的声明:公共的声明可以添加任何的信息,一般添加用户的相关信息或其他业务需要的必要信息,但是不建议添加敏感信息,因为该部分在客户单可解密。

私有的声明:私有声明是提供者和消费者所共同定义的声明,一般不建议存放敏感信息,因为base64是对称解密的,该部分信息可以理解为明文信息。

 

 

3)Signature

Signature 是对前面两部分的签名,防止数据被篡改。

签名原理:

Header和payload对应的json结构进行base64 编码后 

得到的两个串 用英文句点号拼接起来的,

根据header里面的alg指定的前面算法(默认算法是 HMAC SHA256)生成出来的。

posted on 2022-09-25 20:20  Coriander_Leo  阅读(47)  评论(0编辑  收藏  举报