Skip to content

Traefik DigestAuth 中间件文档

DigestAuth(HTTP Digest 认证)

DigestAuth 中间件只允许授权用户访问服务。Digest 认证比 Basic 认证更安全,因为密码以哈希形式传输。

配置示例

YAML 格式:

yaml
# 声明用户列表
http:
  middlewares:
    test-auth:
      digestAuth:
        users:
          - "test:traefik:a2688e031edb4be6a3797f3882655c05"
          - "test2:traefik:518845800f9e2bfb1f1f740ec24f074e"

TOML 格式:

toml
# 声明用户列表
[http.middlewares]
  [http.middlewares.test-auth.digestAuth]
    users = [
      "test:traefik:a2688e031edb4be6a3797f3882655c05",
      "test2:traefik:518845800f9e2bfb1f1f740ec24f074e",
    ]

Labels 格式:

yaml
# 声明用户列表
labels:
  - "traefik.http.middlewares.test-auth.digestauth.users=test:traefik:a2688e031edb4be6a3797f3882655c05,test2:traefik:518845800f9e2bfb1f1f740ec24f074e"

Kubernetes 格式:

yaml
# 声明用户列表
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
  name: test-auth
spec:
  digestAuth:
    secret: userssecret

配置选项

字段描述默认值必填
users授权用户数组。每个用户必须使用 name:realm:encoded-password 格式声明。users 选项支持 Kubernetes secrets。[]
usersFile包含授权用户的外部文件路径。文件内容是 name:realm:encoded-password 列表。""
realm允许自定义认证 realm。"traefik"
headerField允许定义用于存储已认证用户的头字段。""
removeHeader允许在将请求转发到服务之前移除 Authorization 头。false

密码格式

Digest 认证密码使用 htdigest 工具生成。

bash
htdigest -c htdigest.txt traefik test

输出形式为 test:traefik:518845800f9e2bfb1f1f740ec24f074e

users & usersFile

  • 如果同时提供了 usersusersFile,它们会被合并。usersFile 的内容优先级高于 users 中的值。
  • 由于在 Kubernetes 中引用文件路径不切实际,usersusersFile 字段在 Kubernetes IngressRoute 中不可用。应改用 secret 字段。

Kubernetes Secrets

yaml
apiVersion: v1
kind: Secret
metadata:
  name: userssecret
type: Opaque
stringData:
  users: |
    test:traefik:a2688e031edb4be6a3797f3882655c05
    test2:traefik:518845800f9e2bfb1f1f740ec24f074e

BasicAuth vs DigestAuth

  • BasicAuth:客户端以 Base64 编码形式发送凭据,不加密。应仅在 HTTPS 加密连接上使用。
  • DigestAuth:客户端对密码进行哈希后再发送,更安全,但仍然仅在 HTTPS 加密连接上使用。对于高安全要求,请考虑使用 OIDCJWT

在生产环境使用 Traefik OSS?

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

基于 MIT 协议发布