# HTTP 基本鉴权

2022年8月31日3分钟阅读

- FormalSciences/ComputerScience
- ComputerSecurity/UserSecurity

## HTTP 基本鉴权

在 HTTP 中，**基本认证方案（Basic Access Authentication）**是允许客户端（通常指的就是网页浏览器）在请求时，通过用户提供用户名和密码的方式，实现对用户身份的验证。

### 流程图

### 步骤解析

1. 客户端： 向服务器请求一个受限的列表数据或资源。

        GET /list/ HTTP/1.1
        Host: www.baidu.com
        Authorization: Basic aHR0cHdhdGNoOmY=

1. 服务器：客户端你好，这个资源在安全区 baidu.com 里是受限资源，需要基本认证。并且向客户端返回 401 状态码 Unauthorized（未授权）以及附带提供了一个认证域 `www-Authenticate: Basic realm="baidu.com"` 要求进行身份验证；其中 Basic 就是验证的模式，而 `realm="baidu.com"` 说明客户端需要输入这个安全域的用户名和密码，而不是其他域的。

        HTTP/1.1 401 Unauthorized
        www-Authenticate: Basic realm= "baidu.com"

1. 客户端： 服务器，我已经携带了用户名和密码给你了，你看一下（如果客户端是浏览器，那么此时会自动弹出一个弹窗，让用户输入用户名和密码）；

   输入完用户名和密码后，则客户端将用户名及密码以 Base64 加密方式发送给服务器

   传送的格式如下（其中 Basic 内容为：用户名 + 密码的 AES 64 形式）：

        GET /list/ HTTP/1.1
        Authorization: Basic Ksid2FuZzp3YW5n==

1. 服务器： 客户端你好，我已经校验了 `Authorization` 字段你的用户名和密码，是正确的，这是你要的资源。

        HTTP/1.1 200 OK
        ...

### 优点

简单易用，基本所有流行的浏览器都支持。

### 缺点

#### 不安全

- 由于是基于 HTTP 传输，所以它在网络上几乎是裸奔的，虽然它使用了 Base64 来编码，但这个编码很容易就可以解码出来。

- 即使认证内容无法被解码为原始的用户名和密码也是不安全的，恶意用户可以再获取了认证内容后使用其不断的享服务器发起请求，这就是所谓的重放攻击。

#### 无法主动注销

- 由于 HTTP 协议没有提供机制清除浏览器中的 Basic 认证信息，除非标签页或浏览器关闭、或用户清除历史记录。

### 使用场景

内部网络，或者对安全要求不是很高的网络。