简介

Basic身份认证,是HTTP 1.0中引入的认证方案之一,也被称为基本身份认证。 在Basic身份认证中,用户名和密码由冒号“:”连接,用Base64编码并发送。因此,它具有易于窃听和篡改的缺点,但由于它几乎与所有Web服务器和浏览器兼容,因此被广泛使用。为了防止窃听和篡改,后来出现的Digest身份认证技术对Basic身份认证的安全缺陷做了一定的改进。

认证流程

Basic身份认证的典型流程如下图所示:

1. 用户访问受限资源 HTTP请求例:

GET /employee/index.html HTTP/1.1 Host: psteam.co.jp

2. 服务端返回401要求身份认证

HTTP回复例:

HTTP/1.1 401 Authorization Required Date: Wed, 11 May 2014 07:50:26 GMT Server: Apache/1.3.33 (Linux) WWW-Authenticate: Basic realm="SECRET AREA" Connection: close Transfer-Encoding: chunked Content-Type: text/html; charset=iso-8859-1

3. 用户发送认证请求 客户端提示用户输入用户名密码,发送认证请求给服务器端 HTTP请求例:

/employee/index.html HTTP/1.1 Host: psteam.co.jp Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

4. 服务端验证请求 HTTP回复例:

HTTP/1.1 200 OK Date: Wed, 11 May 2014 07:50:26 GMT

补充说明:

如果第3步用户选择取消输入用户名密码,认证流程则当即中止如果第4步用户名密码错误,服务器将再次返回401错误,认证流程重回第3步 认证实现 Apache

Apache里实现Basic认证包含以下两大步骤:

创建用户管理文件
要执行基本身份验证,需要创建一个由用户名和密码组成的管理文件。可以使用一个名为htpasswd的程序来创建文件和用户注册。配置htaccess文件
在需要Basic认证的目录下,创建.htaccsss文件,内容大致如下: AuthUserFile /home/webadmin/.htpasswd AuthGroupFile /dev/null AuthName "Please Enter Your Password" AuthType Basic Require valid-user

包含以下设置项目:

AuthUserFile 
指定步骤1里创建的用户管理文件名。AuthGroupFile 
指定群组文件AuthName 
指定客户端用户名密码输入对话框里显示的提示信息AuthType 
指定认证方式为BasicRequire 
指定允许访问的用户或群组,「valid-user」表示、允许用户管理文件包含的所有用户。 个别指定的时候,多个用户或群组名可用空格区分。 NodeJS

如果使用Express,利用express-basic-auth中间件可以很简单的就能实现Basic认证。