Sensitive Data Exposure
JWT 的 Payload 不是加密的,只是 Base64 编码!
任何人都可以解码查看内容,签名只保证数据未被篡改。
如果在 Payload 中存储敏感信息:
这些信息会被任何获取到 Token 的人看到!
无需密钥,直接 Base64 解码:
在浏览器控制台执行:
// 复制 Token 后执行
const token = 'YOUR_TOKEN_HERE'
const payload = token.split('.')[1]
console.log(JSON.parse(atob(payload)))
// ❌ 错误:在 Payload 中存储敏感信息
const payload = {
userId: 123,
username: 'admin',
password: 'admin123', // 不应该放密码!
creditCard: '4111-xxxx', // 不应该放信用卡!
ssn: '123-45-6789' // 不应该放身份证!
}
// ✅ 正确:只存储必要的非敏感信息
const payload = {
userId: 123,
username: 'admin',
role: 'admin',
iat: 1234567890,
exp: 1234571490
}
| 特性 | JWT (JWS) | JWE |
|---|---|---|
| Payload | Base64 编码(可读) | 加密(不可读) |
| 用途 | 身份验证、授权 | 传输敏感数据 |
| 性能 | 快 | 较慢 |