什么是 JWT
JWT 的数据结构
.
分隔,典型的 JWT 的结构如下所示:Header.Payload.Signature
Header(头部)
{
"alg": "HS256",
"typ": "JWT"
}
ewogICJhbGciOiAiSFMyNTYiLAogICJ0eXAiOiAiSldUIgp9
Payload(载荷)
iss
(Issuer):令牌的发行者。sub
(Subject):令牌的主题,通常是令牌所代表的用户或实体。aud
(Audience):令牌的接收者,表示哪些实体可以使用该令牌。exp
(Expiration Time):令牌的过期时间,表示令牌在何时之后不再有效。nbf
(Not Before):令牌生效时间,在此时间之前令牌不可用。通常与 exp 一起使用,用于定义一个令牌的有效期。iat
(Issued At):令牌的签发时间,表示令牌何时被创建。jti
(JWT ID):表示 JWT 的唯一标识符。可以用于防止 JWT 重放攻击,每个 JWT 都有一个唯一的 ID。{
"sub": "1234567890",
"name": "John Doe",
"admin": true,
"iat": 1516239022,
"exp": 1516242622
}
sub
是主题(Subject),name
是自定义的公共声明,admin
表示用户是否为管理员,iat
表示令牌的签发时间,exp
表示令牌的过期时间。将其进行 Base64 编码,得到 Jwt 的第二部分:ewogICJzdWIiOiAiMTIzNDU2Nzg5MCIsCiAgIm5hbWUiOiAiSm9obiBEb2UiLAogICJhZG1pbiI6IHRydWUsCiAgImlhdCI6IDE1MTYyMzkwMjIsCiAgImV4cCI6IDE1MTYyNDI2MjJ9
Signature(签名)
1.
2.
3.
Header: {"alg": "HS256", "typ": "JWT"}
Payload: {"sub": "1234567890", "name": "John Doe", "admin": true, "iat": 1516239022, "exp": 1516242622}
1.
Encoded Header: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
Encoded Payload: ewogICJzdWIiOiAiMTIzNDU2Nzg5MCIsCiAgIm5hbWUiOiAiSm9obiBEb2UiLAogICJhZG1pbiI6IHRydWUsCiAgImlhdCI6IDE1MTYyMzkwMjIsCiAgImV4cCI6IDE1MTYyNDI2MjJ9
2.
ZjQ2NzI4ZTcwYjM3MzQyMTA5OWEzYjZmY2JmYTJhYWJmOWIyMjQ5MzgxYjVkM2ZkOWI1ZjFmZDgyNDA2ZjY4MQ==
3.
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.ewogICJzdWIiOiAiMTIzNDU2Nzg5MCIsCiAgIm5hbWUiOiAiSm9obiBEb2UiLAogICJhZG1pbiI6IHRydWUsCiAgImlhdCI6IDE1MTYyMzkwMjIsCiAgImV4cCI6IDE1MTYyNDI2MjJ9.ZjQ2NzI4ZTcwYjM3MzQyMTA5OWEzYjZmY2JmYTJhYWJmOWIyMjQ5MzgxYjVkM2ZkOWI1ZjFmZDgyNDA2ZjY4MQ==
JWT 的认证流程
客户端如何使用 JWT ?
修改于 2024-12-24 08:57:54