跳到主要内容

2. Basic 认证方案 (Basic Authentication Scheme)

basic 认证方案基于如下模型: 客户端 (client) 必须针对每个 realm 使用 user-IDpassword 来证明自身身份.realm 值应被视为一个不透明字符串 (opaque string), 只能与该服务器 (server) 上的其他 realm 做相等性比较.只有当服务器能够验证该 Request-URI 所属保护空间 (protection space) 的 user-IDpassword 时, 它才会为该请求 (request) 提供服务.该方案没有可选认证参数 (optional authentication parameters).

对于 Basic 认证, 上述框架 (framework) 具体使用如下形式:

challenge   = "Basic" realm
credentials = "Basic" basic-credentials

当源服务器 (origin server) 收到针对某个保护空间内 URI 的未授权请求 (unauthorized request) 时, MAY 使用如下挑战 (challenge) 进行响应:

WWW-Authenticate: Basic realm="WallyWorld"

其中 "WallyWorld" 是服务器分配的字符串, 用于标识该 Request-URI 的保护空间.代理 (proxy) 也可以使用 Proxy-Authenticate 首部字段, 以相同形式的挑战进行响应.

为了获得授权 (authorization), 客户端会在凭据 (credentials) 中发送一个经过 Base64 [7] 编码的字符串, 其中包含由单个冒号 (":") 字符分隔的 useridpassword.

basic-credentials = base64-user-pass
base64-user-pass = <base64 [4] encoding of user-pass,
except not limited to 76 char/line>
user-pass = userid ":" password
userid = *`<TEXT excluding ":">`
password = *TEXT

userid 可能区分大小写.

如果用户代理 (user agent) 希望发送 userid "Aladdin"password "open sesame", 那么它将使用如下首部字段:

Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

客户端 SHOULD 假定: 在 Request-URI 的路径字段 (path field) 中, 与最后一个符号元素 (symbolic element) 所在深度相同或更深的所有路径, 也都位于当前挑战中 Basic realm 值所指定的保护空间内.客户端 MAY 在尚未收到服务器另一个挑战的情况下, 预先为该保护空间内资源的请求发送相应的 Authorization 首部.类似地, 当客户端向代理发送请求时, 它也可以在尚未收到代理服务器另一个挑战的情况下, 在 Proxy-Authorization 首部字段中复用该 useridpassword.与 Basic 认证相关的安全注意事项, 见第 4 节.