# 認証

EMQX ダッシュボードは、すぐに使える認証およびユーザー管理機能を提供しています。ユーザーはコードを書いたり設定ファイルを手動で編集したりすることなく、ユーザーインターフェースを通じてクライアント認証の仕組みを迅速に設定できます。これにより、さまざまなデータソースや認証サービスと統合して、異なるレベルやシナリオで安全な構成を実現し、開発効率を高めつつセキュリティを強化できます。**認証**ページでは、さまざまな認証リソースを素早く作成・管理できます。

:::tip
認証バックエンドを設定した後は、デバイスやMQTTクライアントがEMQXに安全に接続できるように、対応する認証情報を設定する必要があります。
:::

## 認証の作成

**作成**ボタンをクリックすると、**認証の作成**ページに移動します。認証を作成するには、まず認証メカニズムを選択し（JWT認証を除く）、次に認証データを保存または取得するバックエンドを選択します。これらのバックエンドは、データベースやHTTPサーバーなどからデータを取得できます。最後に、バックエンドに接続するための接続情報を設定します。

### メカニズム

EMQXが提供する以下のメカニズムから選択できます：

- **パスワードベース**：ユーザー名またはクライアントIDとパスワードを用いてクライアントを認証し、データベースやHTTPバックエンドで検証します。
- **JWT**：ユーザー名またはパスワード欄にJSON Web Tokenを提供し、秘密鍵、公開鍵、またはJWKSでトークンを検証することで認証します。バックエンドは不要です。
- **SCRAM**：MQTT 5.0の強化認証メカニズムで、平文パスワードを送信せずにクライアントとサーバーの相互認証を提供します。
- **GSSAPI**：MQTT 5.0の強化認証メカニズムで、Kerberosと統合し、チケットベースの安全な認証を実現します。
- **クライアント情報**：クライアントID、ユーザー名、IPアドレス、TLS証明書情報などの接続メタデータに基づいてクライアントを認証します。

<img src="./assets/create-authn.png" alt="画像" style="zoom:50%;" />

### バックエンド

このステップでは、前のステップで選択したメカニズムに基づいてバックエンドを選択します。

::: tip

一度認証に使用したバックエンドは再選択できません。

:::

バックエンドの詳細な紹介は、[EMQX Authenticators](../access-control/authn/authn.md#emqx-authenticator)をご参照ください。

#### パスワードベース

パスワードベースを選択した場合、以下のバックエンドから選べます：

- **組み込みデータベース**：EMQXの組み込みデータベースを使用して、ユーザー名、クライアントID、ハッシュ化されたパスワードを保存します。
- **外部データベース**：認証データを外部のデータソースに保存します。EMQXは`MySQL`、`PostgreSQL`、`MongoDB`、`Redis`などの主要なデータベースをサポートしています。
- **HTTPサーバー**：外部HTTPサービスから認証結果を取得します。EMQXはクライアント認証情報を設定されたHTTPエンドポイントに送信し、サービスの応答に基づいてクライアントを認証します。

#### JWT

JWTを選択した場合、バックエンドは不要です。すべての認証ロジックは、設定された秘密鍵、公開鍵、またはJWKSを用いてトークン自体を検証することで処理されます。

#### SCRAM

SCRAMを選択した場合、以下のバックエンドがサポートされます：

- **組み込みデータベース**：SCRAMの認証情報（ソルト付きパスワード検証子など）をEMQXの組み込みデータベースに保存します。
- **HTTPサーバー**：外部HTTPサービスからSCRAM認証データを取得し、EMQX外でSCRAM認証情報を管理できます。

SCRAMはクライアントとサーバー間の相互認証を提供し、双方の認証を保証しつつ認証情報の漏洩を防ぎます。

詳細は以下をご覧ください：

- [SCRAM認証](../access-control/authn/scram.md)
- [REST APIベースのSCRAM認証](../access-control/authn/scram_restapi.md)

#### GSSAPI

GSSAPIを選択した場合、バックエンドは以下です：

- **Kerberos**：EMQXはKerberosのキー配布センター（KDC）と統合し、Kerberosチケットを用いてクライアントを認証します。このバックエンドにより、Kerberosベースの認証を通じて集中管理されたID管理と強力なセキュリティが実現します。

詳細は[MQTT 5.0 強化認証 – Kerberos](../access-control/authn/kerberos.md)をご参照ください。

#### クライアント情報

クライアント情報を選択した場合、外部バックエンドは不要です。クライアントの接続情報を設定されたルールに照らして評価し認証を行います。このメカニズムは軽量なアクセス制御やネットワークベースの信頼、または補助的な認証層としてよく使われます。

詳細は[クライアント情報認証](../access-control/authn/cinfo.md)をご覧ください。

### 設定

最後に選択したバックエンドの設定を行います。各バックエンドには接続や利用に関する設定項目があり、ユーザーが設定する必要があります。設定が完了したら、**作成**をクリックしてください。

詳細な設定手順は各[EMQX認証機構](../access-control/authn/authn.md#emqx-authenticator)のドキュメントをご参照ください。

## 認証機構一覧

認証機構を作成すると、認証機構一覧で確認・管理できます。

一覧では、各認証機構のバックエンドとメカニズム、バックエンドの状態が表示されます。例えば、外部データベースの接続に失敗した場合は状態が`Disconnected`と表示されます。このフィールドにマウスを重ねると、EMQXクラスター内のすべてのノードの接続状態の詳細が表示されます。**有効**スイッチを切り替えることで、認証設定を素早く有効化・無効化できます。

認証機構一覧の各エントリは、マウスでドラッグするか、**操作**列の順序調整で並び替え可能です。認証機構の順序は重要で、EMQXは複数の認証機構を順次実行する認証チェーンをサポートしています。現在の認証機構で該当する認証情報が取得できなかった場合、次の認証機構に処理が引き継がれます。

**操作**列では、認証機構の設定変更や削除も行えます。

<img src="./assets/authn-list.png" alt="画像" style="zoom:50%;" />

:::tip 注意
認証を無効にすると、いかなるクライアントも認証されず、すべてのクライアントがEMQXに接続可能になります。十分に注意して操作してください。
:::

## ユーザー管理

組み込みデータベースを使用する認証機構では、**ユーザー管理**タブでユーザー認証情報を管理できます。

このページには以下のいずれかの方法でアクセス可能です：

- **認証機構一覧**ページで、組み込みデータベース認証機構の**操作**列にある**ユーザー**をクリックする。
- 組み込みデータベースの詳細ページを開き、**ユーザー管理**タブに切り替える。

**ユーザー管理**ページでは、ユーザーの作成、編集、削除、スーパーユーザー権限の付与が可能です。また、テンプレートをダウンロードして必要事項を記入し、**ユーザーのインポート**をクリックすることで一括インポートもできます。

ユーザー追加時には、オプションでネームスペースを選択し、特定のスコープにユーザーを紐づけることも可能です。

<img src="./assets/authn-users.png" alt="画像" style="zoom:50%;" />

## 概要

組み込みデータベースの**概要**タブでは、EMQXクラスター全体の認証メトリクスを表示します。成功した認証数、失敗数、一致しなかった試行数、現在の認証レートなどが含まれます。

ページ下部では、各ノードごとの統計情報を確認でき、各EMQXノードの認証状況やパフォーマンスを監視できます。

<img src="./assets/authn-overview.png" alt="画像" style="zoom:50%;" />

## 設定

認証機構一覧ページの**設定**をクリックすると、認証設定を更新できます。

**設定**ページでは、選択した認証機構のパラメータを変更できます。例えば、外部データベースの接続設定や、組み込みデータベースで使用する**UserID Type**（ユーザー名またはクライアントID）、パスワードのハッシュアルゴリズムなどです。

::: tip

組み込みデータベースで**パスワードハッシュ**や**ソルト位置**を変更すると、既存のユーザー認証情報が無効になります。十分に注意して操作してください。

:::

<img src="./assets/authn-settings.png" alt="画像" style="zoom:50%;" />

## さらに詳しく

認証の詳細については、[認証](../access-control/authn/authn.md)をご参照ください。
