# 简介

JWT(JSON Web Token)也就是通过 JSON 形式作为 Web 应用中的令牌,用于在各方之间安全地将信息作为 JSON 对象传输。在数据传输过程中还可以完成数据加密、签名等相关处理。
JSON Web Tokens - jwt.io
JWT 入门以及常见的登录问题_jwt 登录 - CSDN 博客

# 用途

# 授权

这是使用 JWT 的最常见方案。一旦用户登录,每个后续请求将包括 JWT,从而允允许的路由,服务和资源。单点登录是当今广泛使用 JWT 的一项功能,因为它的开销很小并且可以在不同的域中轻松使用。

# 信息交换

JSON Web Token 是在各方之间安全地传输信息的好方法。因为可以对 JWT 进行签名(例如,使用公钥 / 私钥对),所以您可以确保发件人是他们所说的人。此外,由于签名是使用标头和有效负载计算的,因此您还可以验证内容是否遭到篡改。

注意:jwt 跟 session 不一样,jwt 存储在客户端(一般是浏览器本地),session 存储在服务器端,服务器断电后 session 就没了,而 jwt 因为存储在客户端,所以就不会被影响,只要 jwt 不过期,就可以继续使用。

# jwt 认证流程

image.png

# jwt 结构

# 令牌组成

  1. 标头 (Header)
  2. 有效载荷 (Payload)
  3. 签名 (Signature)
    因此,JWT 通常如下所示: xxxxx.yyyyy.zzzzz   Header.Payload.Signature

# Header 标头

Header 头信息主要声明加密算法。

  • 标头通常由两部分组成:令牌的类型(即 JWT)和所使用的签名算法,例如 HMAC SHA256 或 RSA。它会使用 Base64 编码组成 JWT 结构的第一部分。
  • 注意:Base64 是一种编码,也就是说,它是可以被翻译回原来的样子来的。它并不是一种加密过程。
{
  "alg": "HS256",
  "typ": "JWT"
}

# Payload

令牌的第二部分是有效负载,其中包含声明。声明是有关实体(通常是用户)和其他数据的声明。同样的,它会使用 Base64 编码组成 JWT 结构的第二部分。

{
  "sub": "1234567890",
  "name": "John Doe",
  "admin": true
}

指定了七个默认字段供选择

iss:发行人
exp:到期时间
sub:主体
aud:用户
nbf:在此之前不可用
iat:发布时间
jti:JWT ID用于标识该JWT

也可以自定义私有字段,但是不建议在此存放敏感信息,因为此部分可以解码还原出原始内容。虽然它可以解码,但是也不能修改这个内容。

{
  "username":"zhangsan",
  "name":"张三",
}

对其进行 base64 加密,得到 Jwt 的第二部分

# Signature

签证信息,此部分用于防止 jwt 内容被篡改。这个签证信息由三部分组成(由加密后的 Header,加密后的 PayLoad,加密后的签名三部分组成)
header (base64 后的)
payload (base64 后的)
secret
base64 加密后的 header 和 base64 加密后的 payload 使用。连接组成的字符串,然后通过 header 中声明的加密方式进行加盐加密,然后就构成了 jwt 的第三部分,每个部分直接使用 . 来进行拼接。

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

北沐清 微信支付

微信支付

北沐清 支付宝

支付宝