JWT 身份验证:开发者实用指南
2026-05-25
快速回答
快速回答: JWT 由三段 Base64URL 编码部分组成——header、payload、signature,用点号连接。用我们的 JWT 解码器 解码 payload 查看声明;在信任数据前务必在服务端验证签名。
JWT 结构
eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0In0.SIGNATURE
HEADER PAYLOAD SIGNATURE
header 声明算法(alg)与类型(typ)。payload 存放 claims——关于用户或令牌的陈述。
常见声明
| 声明 | 含义 |
|---|---|
sub | Subject(用户 ID) |
iss | Issuer(签发者) |
aud | Audience(受众) |
exp | Expiration(Unix 秒级过期时间) |
iat | Issued at(签发时间) |
若 exp 已过期,令牌无效——我们的解码器会高亮提示。
调试无效令牌
- 将令牌粘贴到 JWT 解码器。
- 确认
alg与 API 预期一致。 - 检查时钟偏差——服务端对
exp常允许 30–60 秒容差。 - 记住:解码 ≠ 验证。任何人都能读 payload;只有持有密钥/私钥的服务端能验证签名。
示例 payload
{
"sub": "user_42",
"name": "Alex",
"iat": 1710000000,
"exp": 1710003600
}
安全注意事项
- 切勿在 JWT payload 中放密钥——它只是编码,不是加密。
- Web 应用优先使用短效 access token + refresh 流程。
- 轮换签名密钥,登出时作废 refresh token。
亲自试试
常见问题
JWT 是加密的吗?
不是。JWT 是签名的(保证完整性);只有在使用较不常见的 JWE 时才会加密,而非常见的签名 JWS。
不验证签名能信任 payload 吗?
不能。未验证的 payload 只能当作不可信提示。
HS256 与 RS256 有何区别?
HS256 使用共享密钥——适合单体应用。RS256 使用公钥/私钥——多个服务验证令牌时更合适。