# 认证

认证是大多数应用的重要组成部分，MQTT 协议支持用户名密码认证，启用身份认证能有效阻止非法客户端的连接。EMQX Cloud 中的认证指的是当一个客户端连接到部署的时候，通过服务器端的配置来控制客户端连接服务器的权限。为了提供更好的安全保障，EMQX 支持多种认证机制。

| **版本**        | **密码认证** | **扩展(密码)认证** | **JWT 认证** | **X.509 证书认证** |
| --------------- | -------------------- | ------------------------------ | ------------------------ | --------------------------------- |
| Serverless |  ✓   | ✗         | ✗       |     ✓           |
| 专有版 | ✓     |  ✓    | ✓       |    ✓   |


## [密码认证(默认)](./default_auth.md)

密码认证是最简单，也是使用最多的认证方式。采用密码认证时，客户端需要提供能够表明身份的凭据，例如用户名、客户端 ID 以及对应的密码，或是 TLS 证书中的一些字段（例如证书公用名称）。这些身份凭据会提前存储到特定数据源（数据库）中，密码通常都会以加盐后散列的形式存储。

EMQX 支持通过密码进行身份验证。启用密码认证后，当客户端尝试连接时，需按要求提供身份凭证信息，EMQX 会在数据库中发起查询，并将返回得到的密码与客户端提供的信息进行匹配，匹配成功后，EMQX 将接受该客户端的连接请求。

## [扩展密码认证](./custom_auth.md)
除简单便捷的内置数据库外，EMQX 还支持通过与多类后端数据库的集成提供密码认证，包括 MySQL、PostgreSQL、Redis 和 HTTP。

- [使用 HTTP 进行密码认证](./http_auth.md)
- [使用 MySQL 进行密码认证](./mysql_auth.md)
- [使用 PostgreSQL 进行密码认证](./pgsql_auth.md)
- [使用 Redis 进行密码认证](./redis_auth.md)

## [JWT认证](./jwt_auth.md)
[JSON Web Token(JWT)](https://jwt.io/) 是一种基于 Token 的认证机制，它不需要服务器来保留客户端的认证信息或会话信息。客户端可以在密码或用户名中携带 Token，EMQX 通过预先配置的密钥或公钥对 JWT 签名进行验证。

此外，如果用户配置了 JWKS 端点，EMQX 也支持通过从 JWKS 端点查询到的公钥列表对 JWT 签名进行验证，从而能够批量为客户端签发认证信息。

## [X.509 证书认证](./tls_ssl.md)
EMQX 支持使用 X.509 证书认证进行客户端认证。通过在 EMQX 中使用 X.509 证书认证，客户端和服务器可以通过 TLS/SSL 建立安全连接，确保通信双方的真实性和传输数据的完整性。EMQX 支持单向和双向认证：单向认证中，只有服务器被客户端认证；双向认证中，客户端和服务器相互验证对方的证书。这种灵活性适应了不同级别的安全需求和部署场景。