常用基础 - http基本认证

  • 作者:KK

  • 发表日期:2017.9.4


先生成用户密码文件

在bin目录下执行htpasswd -c D:/db.apache-pwd adminkk生成一个密码文件,第2个参数是自定义的路径和文件名,第3个参数“adminkk”是自己定义的用户名,到时候访问就用这个用户名了

然后会要求你输入2次密码进行确认,比如我输入的是“121212

然后就会产生D:/db.apache-pwd这个文件,你打开里面的内容可以看到是类似这样的:

adminkk:$apr1$ULtRB5HH$0pnC/xVs6lBo/8cJNa5Aq0

添加到主机配置,设定密码文件

<VirtualHost *:80>
    DocumentRoot "D:\web\phpmyadmin"
    ServerName phpmyadmin
    ServerAlias 
	<Directory "D:\web\phpmyadmin">
		Options FollowSymLinks ExecCGI
		AllowOverride All
		Order allow,deny
		Allow from all
		
		#下面4行是重点
		AuthType Basic
		#下面这个是认证名称,自定义,有些客户端会作为密码框弹窗的标题显示
		AuthName "db auth"
		#设定密码文件
		AuthUserFile D:/db.apache-pwd
		#这里表示必须是adminkk这个用户名才能访问(生成密码时里面要写这个用户名)
		Require user adminkk
		#如果旧配置有Require all granted记得换成上面这个
	</Directory>
</VirtualHost>

运行效果

输入用户名adminkk,密码121212即可访问,否则禁止访问站点


解释什么是Basic Auth

这是HTTP协议中的一部分,进行以上配置后,服务器会返回401状态码,并且附带WWW-Authenticate: Basic realm="认证名称"这样的响应头给客户端,客户端收到这个响应头后就会弹出一个密码框要求用户输入账号密码

然后通过特定的请求头将账号密码提交认证(账号密码的包装请求不需要自己写代码,浏览器等客户端会自己处理,用户只管输入账号密码就行了)

这是一个简单的账号密码认证配置,账号密码会附在请求头里面明文传输,其实也是不完全的,如果你的系统简单到会忽略这些问题可以实施一下

比如在公司内网配置一个认证以防止太多无关人员访问某个系统程序;而在互联网上并不建议这样,除非你还有后面的认证,配置这个BasicAuth只是增加一个门槛就无所谓