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
- 如果同时提供了
users和usersFile,它们会被合并。usersFile的内容优先级高于users中的值。 - 由于在 Kubernetes 中引用文件路径不切实际,
users和usersFile字段在 Kubernetes IngressRoute 中不可用。应改用secret字段。
Kubernetes Secrets
yaml
apiVersion: v1
kind: Secret
metadata:
name: userssecret
type: Opaque
stringData:
users: |
test:traefik:a2688e031edb4be6a3797f3882655c05
test2:traefik:518845800f9e2bfb1f1f740ec24f074eBasicAuth vs DigestAuth
- BasicAuth:客户端以 Base64 编码形式发送凭据,不加密。应仅在 HTTPS 加密连接上使用。
- DigestAuth:客户端对密码进行哈希后再发送,更安全,但仍然应仅在 HTTPS 加密连接上使用。对于高安全要求,请考虑使用 OIDC 或 JWT。
在生产环境使用 Traefik OSS?
如果你在工作中使用 Traefik,可以考虑为其添加企业级 API 网关能力或获取 Traefik OSS 的商业支持。