使用 JWT 安全访问 API
使用 JWT 安全访问 API — Traefik Hub 特性
提示
该中间件仅在 Traefik Hub 中可用。了解 Traefik Hub 的高级特性。
JSON Web Token(JWT,定义在 RFC 7519)允许 Traefik Hub API Gateway 使用私钥签名或公/私钥签名的令牌来保护 API 访问。
Traefik Hub API Gateway 提供多种来源来执行令牌验证:
- 在中间件配置中设置一个密钥值(选项
signingSecret) - 设置公钥:用户使用私钥对令牌进行签名,公钥可用于验证签名(选项
publicKey) - 设置 JSON Web Key (JWK) 文件以定义用于验证传入 JWT 签名的 JWK 集合(选项
jwksFile) - 设置 JSON Web Key (JWK) URL 以定义提供 JWK 集的主机 URL(选项
jwksUrl)
单一来源
JWT 中间件不允许设置多于一种方式来验证传入令牌。当 Hub API Gateway 收到必须使用 JWT 中间件验证的请求时,它会使用上述配置的来源验证令牌。如果令牌验证成功,则请求被接受。
Claim 使用
JWT 可以以 claim(键值对)的形式包含元数据。 JWT 中包含的 claim 可用于高级用例,如使用 claims 添加授权层。
更多信息请参阅专用章节。
使用密钥验证 JWT
要允许 Traefik Hub API Gateway 使用 Kubernetes Secret 中存储的密钥值验证 JWT,应用以下配置:
yaml
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: test-jwt
namespace: apps
spec:
plugin:
jwt:
signingSecret: "urn:k8s:secret:my-secret:signing-secret"
forwardHeaders:
Group: grp
Expires-At: exp
claims: Equals(`grp`, `admin`)适用场景
- 微服务身份认证:微服务之间传递身份信息
- SPA 应用:单页应用调用后端 API
- 移动应用:移动应用访问受保护资源
- 第三方 API 集成:与第三方 API 集成时的身份验证
- API 密钥管理:为 API 颁发短期 JWT
最佳实践
- 使用短期 JWT:JWT 过期时间设置较短(如 15 分钟)
- 使用 Refresh Token:配合长期 Refresh Token 续期
- 使用 HTTPS:JWT 传输必须使用 HTTPS
- 签名算法选择:使用 HS256(对称)或 RS256(非对称)
- 存储在 HttpOnly Cookie:避免 XSS 攻击窃取 token
JWT 优势
- 无状态:服务端无需存储 session
- 可扩展:易于水平扩展
- 跨域:支持跨域身份认证
- 标准化:被广泛支持
在生产环境使用 Traefik OSS?
如果你在工作中使用 Traefik,可以考虑为其添加企业级 API 网关能力或获取 Traefik OSS 的商业支持。