# 通过 HTTP 查询进行认证

EMQX Edge 支持基于 HTTP 的认证，可将客户端身份校验委托给外部 HTTP 服务。当客户端连接时，EMQX Edge 会向认证服务器发送请求。如果服务器返回 HTTP 200，则允许客户端连接；其他状态码会拒绝连接。

## 工作原理

当客户端发送 `CONNECT` 报文时，EMQX Edge 会根据配置的方法、请求头和参数构造 HTTP 请求，并发送到配置的 URL。

**示例：** 客户端 ID 为 `sensor-01`、用户名为 `sensor-user` 的客户端尝试连接。使用以下参数配置：

| Key | Value |
|---|---|
| `clientid` | `%c` |
| `username` | `%u` |
| `password` | `%P` |

EMQX Edge 会填充占位符并发送以下请求：

```bash
POST http://127.0.0.1:80/mqtt/auth
Content-Type: application/x-www-form-urlencoded

clientid=sensor-01&username=sensor-user&password=secret
```

认证服务器检查凭据后，返回 `HTTP 200` 表示允许连接，返回其他状态码则表示拒绝连接。

::: tip 注意
HTTP 认证配置变更需要重启 EMQX Edge 后生效。
:::

## 通过 Dashboard 配置

HTTP 认证位于 **Authentication** 页面中的 **Extended** 标签页。进入该标签页时，该认证方式会自动启用。

1. 在 EMQX Edge Dashboard 中，进入 **Authentication** > **Extended**。
2. 点击 **Actions** 列中的编辑图标。
3. 配置 **Method**、**URL**、**Headers** 和 **Parameters**。
4. 点击 **Save**。

![img](./assets/authentication-http.png)

## Method

指定 HTTP 请求方法。可选值：`POST` 或 `GET`。默认值：`POST`。

## URL

指定 HTTP 认证服务器的 URL。例如：`http://127.0.0.1:80/mqtt/auth`。

## Headers

指定要包含在 HTTP 请求头中的键值对。

| Key | Description |
|---|---|
| `content-type` | 请求体的媒体类型。可使用 `application/x-www-form-urlencoded` 或 `application/json`。 |
| `accept` | 可选。你也可以添加 `cookie` 或 `date` 等其他请求头。 |

## Parameters

指定用于构造请求体（POST）或查询字符串（GET）的参数。每个参数都是一个键值对，其中值是 EMQX Edge 在运行时替换的占位符。

| Key | Placeholder | Description |
|---|---|---|
| `clientid` | `%c` | MQTT Client ID |
| `username` | `%u` | 用户名 |
| `password` | `%P` | 密码 |
