http基本认证模式 HTTP Authorization Schemes Basic

简介

“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 中所描述的潜在问题。

AuthorizationProxy-Authorization 首部

AuthorizationProxy-Authorization 请求消息首部包含有用来向(代理)服务器证明用户代理身份的凭证。这里同样需要指明验证的类型,其后跟有凭证信息,该凭证信息可以被编码或者加密,取决于采用的是哪种验证方案。

Authorization: <type> <credentials>
Proxy-Authorization: <type> <credentials>

官网地址:https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication#authentication_schemes

© 版权声明

相关文章

暂无评论

none
暂无评论...