basic_auth
启用 HTTP 基本身份验证,可用于使用用户名和散列密码保护目录和文件。
请注意,基本身份验证在普通 HTTP 上并不安全。 在决定使用 HTTP 基本身份验证保护什么时,请谨慎使用。
当用户请求受保护的资源时,如果尚未提供用户名和密码,浏览器会提示用户输入。如果 Authorization 标头中存在正确的凭据,服务器会授予访问权限;如果标头缺失或凭据不正确,服务器会响应 HTTP 401 Unauthorized。
Caddy 配置不接受明文密码;在将密码放入配置之前,必须先对其进行哈希处理。caddy hash-password 命令可以帮助完成这一步。
认证成功后,{http.auth.user.id} 占位符将可用,其中包含已认证的用户名。
在 v2.8.0 之前,此指令名为 basicauth;后来为与其他指令保持一致而重命名为 basic_auth。
语法
basic_auth [<matcher>] [<hash_algorithm> [<realm>]] { <username> <hashed_password> ... }
-
<hash_algorithm> 指定此配置中用于哈希的密码哈希算法(或密钥派生函数)。可用选项包括
argon2id,默认值是bcrypt。 -
<realm> 是自定义 realm 名称。
-
<username> 是用户名或用户 ID。
-
<hashed_password> 是密码哈希。
示例
要求对 example.com 的所有请求进行认证:
example.com { basic_auth { # 用户名 "Bob",密码 "hiccup" Bob $2a$14$Zkx19XLiW6VYouLHR5NmfOFU0z2GTNmpkT/5qqR7hx4IjWJPDhjvG } respond "Welcome, {http.auth.user.id}" 200 }
保护 /secret/ 中的文件,使只有 Bob 可以访问(其他路径仍可被任何人访问):
example.com { root /srv basic_auth /secret/* { # 用户名 "Bob",密码 "hiccup" Bob $2a$14$Zkx19XLiW6VYouLHR5NmfOFU0z2GTNmpkT/5qqR7hx4IjWJPDhjvG } file_server }
argon2id 示例:
example.com { root /srv basic_auth /secret/* argon2id { # 用户名 "Bob",密码 "hiccup" Bob $argon2id$v=19$m=47104,t=1,p=1$zJPvVe48N64JUa9MFlVhiw$b5Tznu0PxnA4TciY6qYe2BFPxncF1ePQaeNukHhH1cU } file_server }