Skip to content

使用 OIDC 安全访问 API

使用 OIDC 安全访问 API — Traefik Hub 特性

提示

该中间件仅在 Traefik Hub 中可用。了解 Traefik Hub 的高级特性

OpenID Connect Authentication 构建在 OAuth2 Authorization Code Flow 之上(定义在 OAuth 2.0 RFC 6749, section 4.1)。

它允许通过将身份认证委托给外部提供商(Keycloak、Okta 等)来保护应用,并获取最终用户的会话 claim 和 scope 用于授权。

为了认证用户,中间件通过认证提供商重定向。认证完成后,用户在获得访问上游应用的授权之前被重定向回中间件:

允许 OIDC 中间件使用请求提供的凭据

应用以下配置:

yaml
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
  name: oidc-login
  namespace: apps
spec:
  plugin:
    oidc:
      issuer: MY_ISSUER_URL
      clientId: "urn:k8s:secret:oidc-client:client_id"
      clientSecret: "urn:k8s:secret:oidc-client:client_secret"
      redirectUrl: /oidc/callback

Kubernetes Secrets:

yaml
apiVersion: v1
kind: Secret
metadata:
  name: oidc-client
stringData:
  client_id: my-oauth-client-ID
  client_secret: my-oauth-client-secret

适用场景

  • 企业 SSO:企业内部应用统一身份认证
  • 第三方 IdP 集成:与 Auth0、Okta、Keycloak、Azure AD 等集成
  • 多应用统一登录:多套应用共享同一个身份提供商
  • 满足合规性要求:如 HIPAA、SOX、PCI DSS
  • B2B 场景:跨组织身份认证

OIDC 优势

  • 标准协议:被广泛支持
  • 用户友好:用户使用现有 IdP 登录
  • 安全:基于 OAuth 2.0 + 身份层
  • 可扩展:支持 SSO、MFA、社交登录
  • 丰富的用户信息:通过 ID Token 获取用户信息

最佳实践

  1. 使用 HTTPS:OIDC 通信必须使用 HTTPS
  2. 使用 state 参数:防止 CSRF 攻击
  3. 使用 PKCE:防止授权码拦截
  4. 短期 access token:access token 过期时间较短
  5. 使用 refresh token:实现长期会话
  6. 验证 issuer:确保 token 来自可信的 issuer
  7. 验证 audience:确保 token 颁发给你的应用

常见 OIDC 提供商

  • Keycloak:开源,适合自托管
  • Auth0:商业 SaaS
  • Okta:商业 SaaS
  • Azure AD:Microsoft 生态
  • Google Workspace:Google 生态
  • GitHub OAuth:开发者场景

在生产环境使用 Traefik OSS?

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

基于 MIT 协议发布