Keycloakの管理コンソールの機能をみてみる（管理者編）

# 今日やること

Keycloakアドベンドカレンダー9日目の今回は、Keycloakの管理コンソールをみてみます。

Keycloakの管理コンソールには

- 管理者向け機能
- 利用者向け機能（ユーザー・アカウント・サービス）

があります。

今日は前者の「管理者向け機能」についてみてみます。


# 事前準備

[2日目の『Keycloakのセットアップ』](https://qiita.com/tamura__246/items/13fc301e9409fef77bf3)の通り、以下を準備します。

- Keycloak環境
- Keycloak管理ユーザーと一般ユーザーの作成


# 管理コンソールの概要

管理コンソールは、Keycloakの設定や、ユーザー、グループ等を管理する機能になります。`http://localhost:8080/auth/admin/` にアクセスし、管理者ユーザーでログインします。レルムの管理者でログインする場合は、`http://localhost:8080/auth/admin/レルム名/console/` にアクセスします。（レルム「demo」の管理者でログインする場合は、`http://localhost:8080/auth/admin/demo/console/` にアクセス）

![image.png](https://qiita-image-store.s3.amazonaws.com/0/208533/228d206b-1a6c-da7b-c1c0-4437ed0bf85b.png)

管理コンソールは、画面左側がメニュー、右側が選択メニューに対する設定という構成になっています。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/208533/9e51c55e-b4bf-b43a-7b72-c629c788a424.png)

項目名の横にある「？」マークの上にカーソルをあてると、項目の説明が表示されます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/208533/cd258193-f008-75fb-2da2-63074a776e82.png)

サーバ管理者でログインした場合は、画面左上のレルム名の部分で操作対象のレルムを切り替えることができます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/208533/d2e8f42d-b494-03f6-e565-e4ae087c6a33.png)

それでは、管理コンソールの設定をみていきます。


# 管理コンソールの設定項目

## レルム設定

レルムの各種設定を管理する画面です。

### 一般

レルム名や表示名等を設定する画面です。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/208533/ffde2d65-0976-c04c-e132-89e6990475af.png)

|項目名|説明|デフォルト値|
|:--|:--|:--|
|名前|レルム名。URLに使用される。||
|表示名|レルム表示名。ブラウザタイトルに使用される。||
|HTML表示名|HTML上のレルム表示名。ログイン画面のボディ部に使用される。||
|有効|レルム有効フラグ。|オン|
|エンドポイント|OpenID Connectエンドポイントの設定を表示するリンク。|OpenID Endpoint Configuration|


### ログイン

ログイン関連の設定画面です。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/208533/0fb1a63b-618c-eba1-0061-4cbe33cb4fa2.png)

|項目名|説明|デフォルト値|
|:--|:--|:--|
|ユーザー登録|ユーザーによるユーザー登録を可能にするかどうか。|オフ|
|ユーザー名の編集|ユーザー名フィールドを編集可能にするかどうか。|オフ|
|パスワード忘れ|パスワードを忘れた場合にクリックするリンクをログイン画面に表示するかどうか。|オフ|
|ログイン状態の保存|ログイン状態を保存するチェックボックスをログイン画面に表示するかどうか。|オフ|
|Eメールの確認|初回ログイン時にEメールでのユーザー確認を可能にするかどうか。|オフ|
|Login with email|Eメールでのログインを可能にするかどうか。|オン|
|SSL の要求|SSLを必須にするかどうか。<BR>以下のいずれかを指定する。<BR> <B>全てのリクエスト</B><BR>　必須。<BR><B>外部リクエスト</B><BR>　ローカルホスト、プライベートIP以外は必須。<BR><B>なし</B><BR>　不要。|外部リクエスト|

### Eメール

SMTPサーバの設定画面です。Keycloakは、Eメールアドレスの確認時、パスワードを忘れた時、管理者がサーバイベントに関する通知を受け取る必要がある時等にメールを送信します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/208533/9a227628-73f1-f973-6166-8b91f8bfc4e3.png)

|項目名|説明|デフォルト値|
|:--|:--|:--|
|ホスト|SMTPサーバ。||
|ポート|SMTPポート。||
|From Display Name|差出人の表示名。||
|差出人|差出人のEメールアドレス。||
|Reply To Display Name|Reply-toの表示名。||
|Reply To|Reply-toのEメールアドレス。||
|Envelope From|エンベロープFromのEメールアドレス。||
|SSLの有効|SSLを必要とするかどうか。|オフ|
|StartTLSの有効|TLS通信を必要とするかどうか。|オフ|
|認証の有効|認証を必要とするかどうか。|オフ|


### テーマ

KeycloakのUIテーマの設定画面です。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/208533/5c35820c-6ecd-486c-2a47-1ffba826ca2f.png)

|項目名|説明|デフォルト値|
|:--|:--|:--|
|ログインテーマ|ログイン画面に適用するテーマ。||
|アカウントテーマ|アカウント管理画面のテーマ。||
|管理コンソールテーマ|管理コンソールのテーマ。||
|Eメールテーマ|Eメールのテーマ。||
|国際化の有効|国際化対応を可能にするかどうか。|オフ|


## クライアント

クライアントを管理する画面です。クライアントとは、SSO対象のアプリケーションのことです。OpenID Connect（OIDC）のRelying Party（RP）や、SAMLのService Provider（SP）等がクライアントに該当します。クライアントの作成・変更・削除、設定のエクスポート等を行うことができます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/208533/541a2d6e-4ebf-49cd-aa58-4b118f6035c2.png)

画面右上の「作成」ボタンをクリックすると、クライアント登録画面が表示されます。クライアントプロトコルは、「OpenID Connect」か「SAML」を選択できます。必要な情報を入力し「保存」ボタンをクリックすると、詳細画面に遷移します。

**クライアントプロトコルに「OpenID Connect」を選択した場合**
![image.png](https://qiita-image-store.s3.amazonaws.com/0/208533/bcea8fb3-0514-f013-365a-6478eeb749b8.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/208533/57e0ac8e-fab3-c96d-2800-b90cba2958c4.png)

**クライアントプロトコルに「SAML」を選択した場合**
![image.png](https://qiita-image-store.s3.amazonaws.com/0/208533/fc9193ad-2638-1db8-4787-28191507f0de.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/208533/2d517f98-6a7f-e0bf-025a-d65783c4ce6f.png)

各項目の説明は[Keycloakのドキュメント](http://www.keycloak.org/docs/latest/server_admin/index.html#_clients)を参照ください。

:information_source: クライアント設定の中で「ロール」の設定がありますが、このロールは「クライアントロール」と呼ばれるもので、後程説明するレルムのロールとは別物になります。レルムのロールは、レルム内でグローバルな名前空間を持ちますが、クライアントロールは、基本的に各クライアントで専用の名前空間を持ちます。


## ロール

ロールを管理する画面です。レルム用のロールの作成・変更・削除、デフォルトロールの設定を行うことができます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/208533/165ad484-ee09-8269-dc3a-c17bbe5002b9.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/208533/1f586027-d49b-1844-2dd3-4dda6e950ed6.png)



## アイデンティティ プロバイダー

IDプロバイダの設定画面です。外部IDプロバイダや、ソーシャルネットワークを使用して認証できるようにすることができます。

詳細は、@tamura__246 さんが15日目に書いてくれる予定です！

![image.png](https://qiita-image-store.s3.amazonaws.com/0/208533/31be30a4-666c-d5cf-99cb-efa0e9a998aa.png)


## ユーザーフェデレーション

外部ユーザーデータベースとのユーザー連携の設定画面です。「LDAP」や「Active Directory」で認証を行うようにしたり、IDを同期することができます。

詳細は、@yagiaoskywalker さんが14日目に書いてくれる予定です！

![image.png](https://qiita-image-store.s3.amazonaws.com/0/208533/fbe713af-2d6f-01b3-abd2-5cd2278bdbd5.png)


## 認証

認証に関する設定を管理する画面です。認証フローやパスワードポリシー等を設定することができます。

認証フローとは、Keycloakの各種処理で発生させる、認証、画面、アクションの設定です。例えば、「ブラウザ認証時は、有効なCookieがあれば認証OKとする。有効なCookieがない場合はIDとパスワードによる認証を行う。」とか、「パスワードリセット時は、最初にユーザーID入力画面を表示し、正しいユーザーIDならば次にパスワードリセットメールを送信する。」といったように、処理に応じたフローを定義することができます。

詳細は、@naokiiiii さんが12日目に書いてくれる予定です！

![image.png](https://qiita-image-store.s3.amazonaws.com/0/208533/cb136d18-9d13-413f-a6cd-86c1e08545bc.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/208533/af609511-45f1-de82-84cb-4ffca9af7cbf.png)


## グループ

グループを管理する画面です。グループの作成・変更・削除、グループに対するロールの設定等を行うことができます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/208533/da0e969a-fd67-ada2-8291-ea62bcde83d5.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/208533/7f68dbfb-ac85-dd31-a58e-0dddd573c32e.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/208533/28c08fec-310d-e3b5-0ccc-4129b0b1d8b2.png)


## ユーザー

ユーザーを管理する画面です。ユーザーの追加・変更・削除、ロールのマッピング、グループへの配属・離脱等を行うことができます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/208533/f7eb279c-4f7e-3852-51cf-966ac07d213a.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/208533/5554b575-b4c8-240d-bbdb-c3aef97abbb2.png)


## セッション

セッションを管理する画面です。レルムで現在有効なセッションを確認することができます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/208533/fd9aaf41-7ed5-d924-e9e8-86ff02c0e233.png)


## イベント

イベントの管理画面です。保存するイベントの設定や、保存したイベントの参照等を行うことができます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/208533/d193ac77-c633-ddf0-9b8f-bfdcf80a67a7.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/208533/6ece31a0-111e-5049-010f-4ff07245432f.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/208533/1f2f4926-e2c7-0580-10df-4833ed14fbb6.png)


## インポート

レルムの設定をインポートする画面です。クライアント、グループ、ロールについてインポートできます。JSONファイルをインポートします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/208533/53cdbbe7-e695-b1d9-d0b0-a557c95e0a38.png)

ファイルを選択すると、インポート時の動作を指定する画面が表示されます。インポートするデータの選択、インポートするデータが既に存在した場合の動作を指定することができます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/208533/7a6431d3-81ce-c3c5-fe5f-e433042f11e8.png)


## エクスポート

レルムの設定をエクスポートする画面です。レルム設定、クライアント、グループ、ロール等がエクスポートされます。ユーザーデータについてはエクスポートされません。JSONファイルが出力されます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/208533/6dd39dba-0196-9535-21b4-20b9e50193d3.png)


# まとめ

ざっとですが、「管理コンソール」についてみてみました。表示内容が日本語化されており、また、項目のヘルプ表示も充実しているため、比較的使いやすいと思います。

詳細については、画面上に表示される項目のヘルプ表示や、Keycloakのドキュメントをご参照いただければと思います。


# 参考資料

 - [Keycloak Documentation](http://www.keycloak.org/docs/latest/server_admin/index.html)
 - [NRI OpenStandia Keycloak日本語ドキュメント](http://keycloak-documentation.openstandia.jp/master/ja_JP/server_admin/index.html)