编 写:袁 亮 时 间:2015-07-13 说 明:http basic认证的那些事 一、什么是http basic认证? 1、由http协议规定 2、提供简单的用户验证功能,适合于对安全性要求不高的地方 3、通过在http头部增加 Authorization: Basic username:password 的方式,来向服务端证明自己是一个被授权访问的用户 4、优点: 简单、方便 5、缺点: 安全性太低,账号密码容易泄露,而且不方便升级维护 6、替代协议 oauth,使用oauth可以提供更安全的授权访问,但是实现较复杂 现有oauth已经到了2.0版本,有兴趣的可以去了解下 二、常见使用方式 1、最熟悉的,应该是大家家里的路由器登陆页面,那就是一个典型的http basic认证 2、一些比较旧的项目后台,也会有这种登陆方式 3、自己写一些临时后台,又不想介入复杂的账号体系的话,也可以使用该验证方式 三、工作流程 1、浏览器第一次访问,没有带上相应账号密码请求 2、服务器端,判断如果没有带上相应请求头Authorization: Basic,则返回401状态码,以及 WWW-Authenticate:Basic realm="验证输入框标题" 3、浏览器收到401状态码,弹出各浏览器自行实现的账号、密码输入框供用户输入 4、浏览器将用户输入的用户和密码拼接,并加入到请求头中 Authorization: Basic base64_encode(username:password) 5、服务端将内容解析出来,并与自己的账号密码库比对,如果失败,继续要求填写账号密码 如果正确,则继续访问,并在之前的每次访问都带上相应的请求头 四、几种实现方式 1、apache设置【主要使用】 1.1 开启设置,在httpd.conf文件中,相应目录上设置(需要重新apache服务) AuthType Basic AuthName "请输入你的账号密码" AuthUserFile .htpasswd #账号密码存储文件位置 Require valid-user #账号文件中的所有用户都可访问 1.2 添加账号 /opt/ci123/apache/bin/htpasswd -m /opt/ci123/www/html/geekman/.htpasswd username //注意,第一次添加需要加-cm参数创建文件,之前不允许加-c,否则会直接覆盖那个文件,导致其他账号丢失 1.3 修改密码,同添加 1.4 删除账号,找到对应的账号文件,直接删除那一行即可 2、php设置,弹出 if (!isset($_SERVER['PHP_AUTH_USER'])) { header('WWW-Authenticate: Basic realm="My Realm"'); header('HTTP/1.0 401 Unauthorized'); echo 'Text to send if user hits Cancel button'; die; } else { echo "Hello {$_SERVER['PHP_AUTH_USER']}.
"; echo "You entered {$_SERVER['PHP_AUTH_PW']} as your password.
"; //验证该账号密码是否在允许范围内 } 五、程序模拟访问带http basic的页面 1、两种请求方式 1.1 将账号密码拼接在链接中 http://username:password@192.168.0.249/memadmin/basic.php 1.2 请求头中增加 Authorization: Basic base64_encode(username:password) 2、curl模拟账号密码 curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); curl_setopt($ch, CURLOPT_USERPWD, username:password); 3、rpc接口 初始化的时候,第三、第四个参数分别填用户名密码即可