認証
認証はほとんどのアプリケーションにおいて重要な要素です。MQTTプロトコルはユーザー名とパスワードによる認証をサポートしており、認証を有効にすることで不正なクライアントの接続を効果的に防止できます。EMQXブローカーにおける認証とは、クライアントがEMQXブローカーに接続する際に、サーバー側の設定を通じてクライアントの接続権限を制御することを指します。より高いセキュリティを提供するために、EMQXは複数の認証方式をサポートしています。
| デプロイメント | パスワード認証 | 拡張パスワード認証 | JWT認証 | X.509証明書認証 |
|---|---|---|---|---|
| サーバレス | ✓ | ✗ | ✗ | ✓ |
| 専用フレックス | ✓ | ✓ | ✓ | ✓ |
パスワード認証(デフォルト)
パスワード認証は最もシンプルで広く使われている認証方式です。パスワード認証を使用する場合、クライアントはユーザー名、クライアントID、対応するパスワード、またはTLS証明書の特定フィールド(例:証明書のコモンネーム)など、本人確認が可能な認証情報を提供する必要があります。これらの認証情報はあらかじめ特定のデータソース(データベース)に保存されており、パスワードは通常ソルト付きのハッシュ形式で保存されます。
EMQXはパスワードによる本人確認をサポートしています。パスワード認証を有効にすると、クライアントが接続を試みる際に必要な認証情報を提供する必要があります。EMQXはデータベースに問い合わせを行い、返されたパスワードとクライアントが提供した情報を照合します。照合が成功すれば、EMQXはクライアントの接続要求を受け入れます。
拡張パスワード認証
シンプルで便利な組み込みデータベースに加え、EMQXはMySQL、PostgreSQL、Redis、HTTPなどのさまざまなバックエンドデータベースと連携したパスワード認証もサポートしています。
JWT認証
JSON Web Token(JWT)は、サーバー側でクライアントの認証情報やセッション情報を保持する必要がないトークンベースの認証方式です。クライアントはパスワードやユーザー名にトークンを含めて送信し、EMQXは事前に設定されたシークレットキーまたは公開鍵でJWTの署名を検証します。
さらに、JWKSエンドポイントを設定すると、EMQXはJWKSエンドポイントから取得した公開鍵リストを用いてJWT署名の検証もサポートし、大量の認証情報をクライアントに発行することが可能になります。
X.509証明書認証
EMQXはX.509証明書認証を用いたクライアント認証をサポートしています。EMQXでX.509証明書認証を使用することで、クライアントとサーバーはTLS/SSLを介して安全な接続を確立し、通信当事者の真正性と送信データの完全性を保証できます。EMQXは片方向認証と双方向認証の両方をサポートしています。片方向認証ではクライアントがサーバーのみを認証し、双方向認証ではクライアントとサーバーがお互いの証明書を相互に検証します。この柔軟性により、さまざまなセキュリティ要件やデプロイメントシナリオに対応可能です。