Skip to content

使用 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

最佳实践 ​

  1. 使用短期 JWT:JWT 过期时间设置较短(如 15 分钟)
  2. 使用 Refresh Token:配合长期 Refresh Token 续期
  3. 使用 HTTPS:JWT 传输必须使用 HTTPS
  4. 签名算法选择:使用 HS256(对称)或 RS256(非对称)
  5. 存储在 HttpOnly Cookie:避免 XSS 攻击窃取 token

JWT 优势 ​

  • 无状态:服务端无需存储 session
  • 可扩展:易于水平扩展
  • 跨域:支持跨域身份认证
  • 标准化:被广泛支持

在生产环境使用 Traefik OSS?

如果你在工作中使用 Traefik,可以考虑为其添加企业级 API 网关能力或获取 Traefik OSS 的商业支持。

基于 MIT 协议发布