Java 认证与 JWT 概览
认证与鉴权边界、JWT 常见用法与风险:服务间如何传递身份。
#type / concept
#status / growing
#tech / dev
#resource / java
[!info] 关联笔记
Java 认证与 JWT 概览
这个概念为什么出现
API 需要知道“谁在调用、能否做”。会话 Cookie、Token、JWT、mTLS 是不同机制。JWT 常被用于无状态传递身份声明,但误用会导致无法吊销与算法漏洞。
[!abstract] 一句话理解 认证确认身份,授权判定权限;JWT 是一种可验证的声明格式,不是自动安全方案,必须校验签名、受众、过期并保护密钥。
最小可运行示例
场景:从 Authorization 头解析 Bearer 形态(不验证签名的教学骨架)
public class BearerParse {
static String extract(String authorizationHeader) {
if (authorizationHeader == null || !authorizationHeader.startsWith("Bearer ")) {
throw new IllegalArgumentException("missing bearer");
}
String token = authorizationHeader.substring("Bearer ".length()).trim();
if (token.isEmpty()) throw new IllegalArgumentException("empty token");
return token;
}
public static void main(String[] args) {
System.out.println(extract("Bearer abc.def.ghi"));
}
}
javac BearerParse.java && java BearerParse
期望:
abc.def.ghi
真实系统必须用库验签(jjwt 等)并检查 exp/iss/aud。
结合场景再看三个关注点
- 解析 ≠ 认证成功。
- 密钥与算法白名单。
- 授权要基于声明与策略,不是“有 token 就放行”。
核心概念与准确模型
1. 认证/授权
2. JWT 结构 header.payload.signature
3. 会话 vs 无状态权衡(吊销、隐私、长度)
边界情况与反直觉行为
alg=none历史漏洞。- 敏感数据勿塞 payload(可解码)。
- 时钟偏移影响 exp。
常见误区
[!warning] 常见误区:JWT 自动加密 默认只签名;内容可读除非 JWE。
工程实践
- 短过期 + 刷新策略。
- HTTPS only。
- 权限变更的吊销方案。
- 安全库勿自写加密。
本节总结
- 认证授权分离
- JWT 是工具有风险
- 验签与声明检查
自测题
- 认证与授权差别?
- 为什么 payload 不能放密码?
参考答案
- 你是谁 vs 你能做什么。
- JWT 常仅 Base64 编码可被解码,且可能落日志。
延伸阅读与资料来源
| 资料 | 类型 | 支撑内容 |
|---|---|---|
| RFC 7519 JWT | 标准 | JWT |
| OWASP Auth Cheat Sheet | 安全 | 认证实践 |