HTTP Authorization 之 Basic Auth

一、简介

在HTTP中,基本认证(Basic access authentication)是一种用来允许网页浏览器或其他客户端程序在请求时提供用户名和口令形式的身份凭证的一种登录验证方式。

最明显的特征是,Basic Auth 就是在请求的时候在headers中设置 Authorization: "Basic 用户名和密码的base64加密字符串"。

JWT Token 认证,建议把 Token 保存在 Authorization Bearer中。


二、访问形式

1、使用浏览器

在使用浏览器访问设置了 HTTP Basic Auth 的服务器时,会弹出对话框,输入用户名和密码即可。

2、使用 HTTP Client 工具

http://user:passwd@httpbin.org/basic-auth/user/passwd



三、原理

这一个典型的HTTP客户端和HTTP服务器的对话,服务器安装在同一台计算机上(localhost),包含以下步骤:

1、客户端请求一个需要身份认证的页面,但是没有提供用户名和口令。这通常是用户在地址栏输入一个URL,或是打开了一个指向该页面的链接。

2、服务端响应一个401应答码,并提供一个认证域。

3、接到应答后,客户端显示该认证域(通常是所访问的计算机或系统的描述)给用户并提示输入用户名和口令。此时用户可以选择确定或取消。

4、用户输入了用户名和口令后,客户端软件会在原先的请求上增加认证消息头(值是base64encode(username+":"+password)),然后重新发送再次尝试。

5、在本例中,服务器接受了该认证屏幕并返回了页面。如果用户凭据非法或无效,服务器可能再次返回401应答码,客户端可以再次提示用户输入口令。


注意:客户端有可能不需要用户交互,在第一次请求中就发送认证消息头。

客户端请求(没有认证信息):

GET /private/index.html HTTP/1.0
Host: localhost


(跟随一个换行,以回车(CR)加换行(LF)的形式)

服务端应答:

HTTP/1.0 401 Authorization Required
Server: HTTPd/1.0
Date: Sat, 27 Nov 2004 10:18:15 GMT
WWW-Authenticate: Basic realm="Secure Area"
Content-Type: text/html
Content-Length: 311



客户端的请求(用户名:Aladdin,口令:open sesame):

GET /private/index.html HTTP/1.0
Host: localhost
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==


说明:base64encode(Aladdin:open sesame)=QWxhZGRpbjpvcGVuIHNlc2FtZQ==


四、优点和缺点

优点

基本认证的一个优点是基本上所有流行的网页浏览器都支持基本认证。基本认证很少在可公开访问的互联网网站上使用,有时候会在小的私有系统中使用(如路由器网页管理接口)。后来的机制HTTP摘要认证是为替代基本认证而开发的,允许密钥以相对安全的方式在不安全的通道上传输。


程序员和系统管理员有时会在可信网络环境中使用基本认证,使用Telnet或其他明文网络协议工具手动地测试Web服务器。这是一个麻烦的过程,但是网络上传输的内容是人可读的,以便进行诊断。


缺点

虽然基本认证非常容易实现,但该方案创建在以下的假设的基础上,即:客户端和服务器主机之间的连接是安全可信的。特别是,如果没有使用SSL/TLS这样的传输层安全的协议,那么以明文传输的密钥和口令很容易被拦截。该方案也同样没有对服务器返回的信息提供保护。


现存的浏览器保存认证信息直到标签页或浏览器被关闭,或者用户清除历史记录。HTTP没有为服务器提供一种方法指示客户端丢弃这些被缓存的密钥。这意味着服务器端在用户不关闭浏览器的情况下,并没有一种有效的方法来让用户注销。



五,Nginx 实现

生成命令文件:

printf "admin:$(openssl passwd -crypt 123456)\n" >>pass_file  

配置文件设置:

location /pma {
    auth_basic  "登录认证"; 
    auth_basic_user_file /nginx/conf/conf.d/pass_file;
    
    autoindex on;
    autoindex_exact_size on;
    autoindex_localtime on;
}



参考:

https://www.jianshu.com/p/4cd42f7359f4

https://zh.wikipedia.org/wiki/HTTP%E5%9F%BA%E6%9C%AC%E8%AE%A4%E8%AF%81


修改时间 2021-07-13

真诚赞赏,手留余香
赞赏
随机推荐
CSS中比一像素还要细的边框
javascript获取当前时间
Vue.js 如何添加全局函数或变量?
CentOS 时间命令 timedatectl
MySQL 生成随机整数
使用 sqlmap 检测 SQL 注入漏洞
CentOS 磁盘空间相关命令
什么是加载占位图(Skeleton Screen Loading)
Wordpress 常用标签笔记
Bash 常用代码