# 認証

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

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

## 認証の作成

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

### メカニズム

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

1. パスワードベース：クライアントIDまたはユーザー名とパスワードを使用。
2. JWT：クライアントがユーザー名またはパスワードに JWT トークンを含める方式。
3. SCRAM：MQTT 5.0 の強化認証で、クライアントとサーバー間の双方向認証を可能にします。

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

### バックエンド

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

:::tip

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

:::

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

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

`Password-Based` を選択した場合、データを保存するデータベースか、データを提供する HTTP サーバーのいずれかを選べます。データベースは以下の2種類があります。

- EMQX の組み込みデータベース、すなわち `Built-in Database`
- 外部データベース。`MySQL`、`PostgreSQL`、`MongoDB`、`Redis` などの主要なデータベースを選択・接続可能です。

また、認証データを提供できる HTTP サービス、すなわち `HTTP Server` を直接利用することもできます。

#### JWT

JWT を選択した場合、バックエンドの選択は不要です。

#### SCRAM

MQTT 5.0 の強化認証機能で、選択すると現在は `Built-in Database` のみ利用可能です。これは EMQX の組み込みデータベース（Mnesia）を使用します。

強化認証はクライアントとサーバーの双方向認証を実現し、接続されたクライアントが正当なものであることをサーバーが検証し、クライアントも接続されたサーバーが正当なものであることを検証できるため、より高いセキュリティを提供します。

MQTT 5.0 強化認証の詳細は、[SCRAM Authentication](../access-control/authn/scram.md) および [MQTT 5.0 Enhanced Authentication - Kerberos](../access-control/authn/kerberos.md) を参照してください。

### 設定

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

#### 組み込みデータベース

例として `Built-in Database` を使用する場合、ユーザー名かクライアントIDのどちらを使うか選択し、パスワードの暗号化方式を設定します。MQTT 5.0 の強化認証で組み込みデータベースを使う場合は、暗号化方式のみ設定すればよいです。

組み込みデータベースの詳細は、[Use Built-in Database](../access-control/authn/mnesia.md) を参照してください。

#### 外部データベース

外部データベースを使用する場合は、データベースのサーバーアドレス、データベース名、ユーザー名とパスワード、認証設定、そしてデータベースからデータを取得するための SQL 文やその他のクエリ文を設定する必要があります。

MySQL やその他外部データベースの詳細は、[Integrate with MySQL](../access-control/authn/mysql.md) や各データベースの設定ドキュメントを参照してください。

#### HTTP サーバー

HTTP サーバーを使用する場合は、HTTP サービスのリクエストメソッド（POST または GET）、リクエスト URL（http または https プロトコルを含める必要があります）、HTTP リクエストヘッダーの設定を行います。認証情報は `Body` フィールドに入力します。例として、`username` と `password` を JSON データで記述します。

HTTP サーバーの詳細は、[Use HTTP Service](../access-control/authn/http.md) を参照してください。

#### JWT と JWKS

JWT を使用する場合は、バックエンドを選択せずに直接 JWT を設定できます。JWT のトークンがクライアントの `username` か `password` のどちらから取得されるかを設定します。これにより、クライアントは接続時に対応するフィールドにトークンを入力するだけで JWT 認証が行えます。次に、暗号化方式に応じて `Secret` または `Public Key` を設定し、`Secret` の Base64 エンコード有無を指定します。最後に、検証対象の情報を `Payload` に入力して JWT 認証の設定を完了します。

`JWKS Endpoint` から最新の JWKS を定期的に取得できます。これは認可サーバーが発行し、RSA または ECDSA アルゴリズムで署名された JWT を検証するための公開鍵のセットです。JWKS の更新間隔（秒単位）も設定可能です。最後に `Payload` を設定して JWKS の設定を完了します。

JWT の詳細は、[JWT Authentication](../access-control/authn/jwt.md) を参照してください。

## 認証器一覧

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

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

認証器一覧の各エントリは、マウスドラッグや **Actions** 列の順序調整で並び替え可能です。認証器の順序は重要で、EMQX は複数の認証器を認証チェーンとして順次処理します。現在の認証器で認証情報が見つからない場合は、次の認証器に処理が移ります。

**Actions** 列では、認証器の設定変更や削除も可能です。

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

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

## ユーザー管理

組み込みデータベースを使用しているユーザーは、認証器一覧ページの **User Management** をクリックして認証情報を管理できます。ユーザー名とパスワードの追加・削除が可能で、テンプレートをダウンロードして認証情報を記入し、**Import** をクリックすることで認証関連のユーザー情報を一括作成できます。

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

## 概要

一覧ページの **Mechanism and Backend** リストで認証器名をクリックすると、概要ページに移動します。このページでは EMQX クラスター内の認証器のメトリクス情報を確認できます。認証成功数や失敗数、不一致数、現在接続中の認証率などが表示されます。

ページ下部のリストから各ノードのメトリクスデータを監視できます。

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

## 設定

一覧ページの **Settings** をクリックすると、認証設定の変更が可能です。

設定ページでは、外部データベースの接続情報が変更された場合や、組み込みデータベースの `UserID Type` をユーザー名またはクライアントIDに変更したい場合、パスワードの暗号化方式を変更したい場合などに現在の認証器設定を修正できます。

:::tip 注意
組み込みデータベース使用時に **Password Hash** や **Salt Position** を更新すると、既存の認証データが利用できなくなる可能性があります。十分に注意してください。
:::

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

## 詳細情報

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