在对 JWT 进行 Base64 解码时,发现 JSON 数据不完整。本文主要介绍相关知识点并解决这个问题。
1. JWT 简介
JWT 通过在 Header 中设置
Authorization: Bearer <token>
进行认证的传递。JWT Token 是一个 . 连接的 Base64 编码字符串,类似这样 Header.Payload.Signature ,有三部分组成:
1
2
3
4
|
{
"alg": "HS256",
"typ": "JWT"
}
|
- Payload ,负载信息,通常是 iss(签发者),exp(过期时间),sub(面向的用户),aud(接收方),iat(签发时间)等
1
2
3
4
5
|
{
"sub": "1234567890",
"name": "John Doe",
"admin": true
}
|
- Signature ,对 Base64 编码的 Header 和 Playload 进行签名,防止信息被篡改。
1
2
3
4
5
|
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
your-256-bit-secret
)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
Input : https://www.chenshaowen.com/
StdEncoding : aHR0cHM6Ly93d3cuY2hlbnNoYW93ZW4uY29tLw==
StdEncoding : https://www.chenshaowen.com/
URLEncoding : aHR0cHM6Ly93d3cuY2hlbnNoYW93ZW4uY29tLw==
URLEncoding : https://www.chenshaowen.com/
RawStdEncoding : aHR0cHM6Ly93d3cuY2hlbnNoYW93ZW4uY29tLw
RawStdEncoding : https://www.chenshaowen.com/
RawURLEncoding : aHR0cHM6Ly93d3cuY2hlbnNoYW93ZW4uY29tLw
RawURLEncoding : https://www.chenshaowen.com/
Input : abc123!?$*&()'[email protected]~
StdEncoding : YWJjMTIzIT8kKiYoKSctPUB+
StdEncoding : abc123!?$*&()'[email protected]~
URLEncoding : YWJjMTIzIT8kKiYoKSctPUB-
URLEncoding : abc123!?$*&()'[email protected]~
RawStdEncoding : YWJjMTIzIT8kKiYoKSctPUB+
RawStdEncoding : abc123!?$*&()'[email protected]~
RawURLEncoding : YWJjMTIzIT8kKiYoKSctPUB-
RawURLEncoding : abc123!?$*&()'[email protected]~
|