# 認証

認証はほとんどのアプリケーションにおいて重要な要素です。MQTTプロトコルはユーザー名とパスワードによる認証をサポートしており、認証を有効にすることで不正なクライアント接続を効果的に防止できます。EMQXプラットフォームにおける認証とは、クライアントがEMQXプラットフォームに接続する際に、サーバー側の設定を通じてクライアントの接続権限を制御することを指します。より高いセキュリティを提供するために、EMQXは複数の認証方式をサポートしています。

| **デプロイメント** | **パスワード認証** | **拡張（パスワード）認証** | **JWT認証** | **X.509証明書認証** |
| ------------------ | ------------------ | --------------------------- | ----------- | -------------------- |
| サーバーレス       | ✓                  | ✗                           | ✗           | ✓                    |
| 専用               | ✓                  | ✓                           | ✓           | ✓                    |

## [パスワード認証（デフォルト）](./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/)は、サーバーがクライアントの認証情報やセッション情報を保持する必要のないトークンベースの認証方式です。クライアントはパスワードやユーザー名にトークンを含めて送信し、EMQXは事前に設定されたシークレットキーまたは公開鍵を用いてJWTの署名を検証します。

さらに、JWKSエンドポイントが設定されている場合、EMQXはJWKSエンドポイントから取得した公開鍵リストを使ってJWT署名の検証もサポートしており、クライアントへの認証情報の一括発行が可能です。

## [X.509証明書認証](./tls_ssl.md)

EMQXはX.509証明書認証を用いたクライアント認証をサポートしています。EMQXでX.509証明書認証を利用することで、クライアントとサーバーはTLS/SSLを介して安全な接続を確立し、通信相手の真正性と送信データの完全性を保証できます。EMQXは片方向認証と双方向認証の両方に対応しています。片方向認証ではクライアントがサーバーのみを認証し、双方向認証ではクライアントとサーバーがお互いの証明書を相互に検証します。この柔軟性により、さまざまなセキュリティ要件やデプロイメントシナリオに対応可能です。
