简介
"Basic" HTTP 验证方案是在 RFC 7617中规定的,在该方案中,使用用户的 ID/密码作为凭证信息,并且使用 base64 算法进行编码。
最明显的特征是,在headers中设置
"Authorization": "Basic " + base64(username+":"+password)
基本验证方案的安全性
由于用户 ID 与密码是是以明文的形式在网络中进行传输的(尽管采用了 base64 编码,但是 base64 算法是可逆的),所以基本验证方案并不安全。
基本验证方案应与 HTTPS / TLS 协议搭配使用。假如没有这些安全方面的增强,那么基本验证方案不应该被来用保护敏感或者极具价值的信息。
举个例子, 构造password可以采用hash算法 HMAC-SHA1, 服务方再进行验证
访问拒绝
401
未认证
407
未代理认证
403
用户证书权限不够, 当(代理)服务器收到一个合法认证信息时,该认证不能获取请求资源的权限
使用 URL 中的身份凭证进行的访问(已废弃)
许多客户端同时支持避免弹出登录框,而是使用包含用户名和密码的经过编码的 URL,如下所示:
https://username:password@www.example.com
这种 URL 是不赞成使用的。在 Chrome 中,URL 中的 username:password@ 部分甚至会因为安全原因而被移除。Firefox 则会检查该站点是否真的需要身份验证,假如不是,则会弹出一个警告窗口:你即将使用用户名“username”登录”
使用 Apache 限制访问和基本身份验证
要对 Apache 服务器上的目录进行密码保护,你需要一个 .htaccess
和 a .htpasswd
文件。
该 .htaccess
文件格式通常看起来像这样:
AuthType Basic
AuthName "Access to the staging site"
AuthUserFile /path/to/.htpasswd
Require valid-user
该 .htaccess
文件引用一个 .htpasswd
文件,其中每行用冒号(“:”)分隔的用户名和密码。你不能看到真实的密码因为它们是 encrypted (在这个例子中是使用了 MD5). 你可以命名.htpasswd
文件 为你所喜欢的名字,但是应该保证这个文件不被其他人访问。(Apache 通常配置阻止访问 .ht*
类的文件).
aladdin:$apr1$ZjTqBB3f$IF9gdYAGlMrs2fuINjHsz.
user2:$apr1$O04r.y2H$/vEkesPhVInBByJUkXitA/
nginx 访问限制和基本认证
在 nginx 配置中,对需要保护的 location 你需要做如下配置:auth_basic 指令提供密码保护域的名称;auth_basic_user_file 指令指定包含用户密文的证书的文件(与 apache 例子中一致)
在 nginx 中,你需要指定一个保护区域和该 auth_basic
指令提供的保护区域名字。然后该 auth_basic_user_file
指令指向一个.htpasswd
包含加密用户凭据的文件,就像上面的 apache 例子。
location /status {
auth_basic "Access to the staging site";
auth_basic_user_file /etc/apache2/.htpasswd;
}
其他验证方案
通用 HTTP 身份验证框架可以被多个验证方案使用。不同的验证方案会在安全强度以及在客户端或服务器端软件中可获得的难易程度上有所不同。
最常见的验证方案是“基本验证方案”("Basic"),该方案会在下面进行详细阐述。IANA 维护了一系列的验证方案,除此之外还有其他类型的验证方案由虚拟主机服务提供,例如 Amazon AWS。常见的验证方案包括:
-
Basic (查看 RFC 7617,base64 编码凭证。),
-
Bearer (查看 RFC 6750,bearer 令牌通过 OAuth 2.0 保护资源),
-
Digest (查看 RFC 7616,只有 md5 散列 在 Firefox 中支持,查看 bug 472823 用于 SHA 加密支持),
-
HOBA (查看 RFC 7486(草案),HTTP Origin-Bound 认证,基于数字签名),
-
Mutual (查看 draft-ietf-httpauth-mutual),
-
AWS4-HMAC-SHA256 (查看 AWS docs).
HTTP 认证的字符编码
浏览器使用 utf-8
编码用户名和密码。Firefox 曾使用 ISO-8859-1
,但为与其他浏览器保持一致改为 utf-8
,也为了避免 bug 1419658 中所描述的潜在问题。
Authorization
与 Proxy-Authorization
首部
Authorization
与 Proxy-Authorization
请求消息首部包含有用来向(代理)服务器证明用户代理身份的凭证。这里同样需要指明验证的类型,其后跟有凭证信息,该凭证信息可以被编码或者加密,取决于采用的是哪种验证方案。
Authorization: <type> <credentials>
Proxy-Authorization: <type> <credentials>
官网地址:https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication#authentication_schemes
网友评论