Skip to content

Traefik BasicAuth 中间件文档

BasicAuth(HTTP Basic 认证)

basicAuth 中间件只允许授权用户访问服务。

配置示例

YAML 格式

yaml
# 声明用户列表
http:
  middlewares:
    test-auth:
      basicAuth:
        users:
          - "test:$apr1$H6uskkkW$IgXLP6ewTrSuBkTrqE8wj/"
          - "test2:$apr1$d9hr9HBB$4HxwgUir3HP4EsggP/QNo0"

TOML 格式

toml
# 声明用户列表
[http.middlewares]
  [http.middlewares.test-auth.basicAuth]
  users = [
    "test:$apr1$H6uskkkW$IgXLP6ewTrSuBkTrqE8wj/",
    "test2:$apr1$d9hr9HBB$4HxwgUir3HP4EsggP/QNo0",
  ]

Labels 格式

yaml
# 声明用户列表
#
# 注意:在 docker-compose.yml 中使用时,密码哈希中所有的 `$` 符号都需要进行双重转义。
# 要创建 user:password 对,可以使用以下命令:
# echo $(htpasswd -nB user) | sed -e s/\\$/\\$\\$/g
#
# 此外,在不进行变量展开的上下文中(例如 Ansible 的 docker_container 模块),`$` 符号**不应**被双重转义。
labels:
  - "traefik.http.middlewares.test-auth.basicauth.users=test:$$apr1$$H6uskkkW$$IgXLP6ewTrSuBkTrqE8wj/,test2:$$apr1$$d9hr9HBB$$4HxwgUir3HP4EsggP/QNo0"

Tags 格式

json
{
  "Tags": [
    "traefik.http.middlewares.test-auth.basicauth.users=test:$apr1$H6uskkkW$IgXLP6ewTrSuBkTrqE8wj/,test2:$apr1$d9hr9HBB$4HxwgUir3HP4EsggP/QNo0"
  ]
}

Kubernetes 格式

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

配置选项

字段描述默认值必填
users授权用户数组。每个用户必须使用 name:hashed-password 格式声明。更多信息参见密码格式""
usersFile包含授权用户的外部文件路径。文件内容是 name:hashed-password 列表。更多信息参见用户与用户文件""
realm允许自定义认证 realm。"traefik"
headerField允许定义用于存储已认证用户的头字段。""
removeHeader允许在将请求转发到服务之前移除 Authorization 头。false

密码格式

密码必须使用 MD5SHA1BCrypt 进行哈希。 使用 htpasswd 工具生成密码。

users & usersFile

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

Kubernetes Secrets

users 选项支持 Kubernetes secrets。

Kubernetes kubernetes.io/basic-auth secret 类型

Kubernetes 支持一种特殊的 kubernetes.io/basic-auth secret 类型。 该 secret 必须包含两个键:usernamepassword

请注意,这些键未经过任何哈希或加密处理,因此比其他方法安全性更低。 你可以在 Kubernetes Basic 认证 Secret 文档 中找到更多信息。


在生产环境使用 Traefik OSS?

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

基于 MIT 协议发布