JWT算法详解

JWT(JSON Web Token)的整个算法流程主要基于其签名算法。以最常见的签名算法HS256(HMAC SHA256)为例,以下是详细的算法流程,涵盖编码、签名和验证过程:

  • 编码

  • 构造头部(Header):头部通常是一个包含令牌类型和签名算法的 JSON 对象,例如:
{
  "alg": "HS256",
  "typ": "JWT"
}

将其转换为 UTF-8 字符串,然后进行 Base64Url 编码。

  • 构造载荷(Payload):载荷包含用户信息和其他声明(如过期时间、签发者等),也是一个 JSON 对象,例如:
{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022,
  "exp": 1516239022 + 3600
}

同样转换为 UTF-8 字符串并进行 Base64Url 编码。

  • 组合编码后的头部和载荷:将编码后的头部和载荷用 "." 连接起来,形成一个字符串。

  • 签名

  • 生成签名:使用 HMAC SHA256 算法,以密钥(secret key)和上述连接后的字符串为输入,生成一个签名。公式如下:

    signature = HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)

    将生成的签名进行 Base64Url 编码。

  • 组合完整令牌:将编码后的头部、载荷和签名用 "." 连接起来,形成完整的 JWT 令牌。

  • 验证

  • 提取头部和载荷:从令牌中提取编码后的头部和载荷部分。

  • 生成新的签名:使用相同的密钥和算法,对提取的头部和载荷部分重新生成签名。

  • 比对签名:将新生成的签名与令牌中的签名部分进行比对,若一致则验证成功。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值