JWT(JSON Web Token)

2024-01-24  本文已影响0人  M_lear

由头部、载荷、签名三部分组成。
头部指定使用的签名算法。
载荷携带已认证用户的非敏感信息。
签名就是使用头部指定的签名算法对头部和载荷的签名。


使用token的好处是,服务端可以仅保存一个签名密钥,就可以进行用户认证。
典型的头部:

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

type可省略,默认值为"JWT"

载荷就是存用户信息的json。

签名就是:

HS512(  
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret))

最终的token就是对这三部分进行base64url编码,然后通过.拼接成的一个字符串。

eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2tleSI6IjhkYmNiODA0LTkxNzAtNDIzOC1iYzhhLTczZGVmYzU3ZTIxNyJ9.HuFST57lj-7N3MSNB8JXEauOhr3BhWb1PxXLWdwqM65MZHDd8eoSAdPdHrxRP2NfPq5MUnucjGYUUKUlqT0bCQ
从JWT设计者的角度看JWT

目标:自包含(JWT本身包含了所有必要的信息,而不需要依赖于外部系统或数据库进行附加查询)

所以这就要求JWT包含所有的必要信息。这些信息的格式需要定义,设计者选择了流行的json格式。这就是JWT中的载荷(payload)。
为了防止必要信息不被篡改,所以加上了签名(signature)。
为了知道使用的签名算法,所以又加了个头部(header),头部也是json格式。

为了支持token能放到URL中使用(比如api.example.com/?token=xxx),所以将三部分都用base64url进行编码。

最后就是把三部分用分隔符连接成一个整体。设计者选择了“.”符号。

上一篇 下一篇

猜你喜欢

热点阅读