Keycloakの管理コンソール画面をみてみる（管理者向けコンソール編）

:::note info
※本記事は、Keycloakのバージョンアップに伴い、「[Keycloakの管理コンソールの機能をみてみる（管理者編）](https://qiita.com/masuo3/items/e02d58c6cf4897a9dd6e)」の記事を最新化したものです。
:::
# やること
keycloakには
・管理者向けコンソール
・利用者向けコンソール
があります。

今回は、管理者向けコンソールの各項目をみていきます。

# 前提
こちらを実施していることが前提になります。

https://qiita.com/l_katayose/items/cbaff1395924cf13218c

今回セットアップした環境は以下です。
・keycloak 23.0.7
・Google Chrome 117.0.5938.92
Windows PowerShellでkeycloakサーバーを立ち上げ、chromeで管理者向けコンソールにアクセスしました。
また、管理ユーザーを作成している必要があります。詳細は上の記事を確認ください。


# 管理コンソールとは
管理コンソールは、Keycloakのクライアントやユーザー、グループ等の各種設定を管理する機能になります。
サーバー起動後にhttp://localhost:8080 にアクセスし、Administration Consoleをクリックし、管理ユーザーとしてログインすることでアクセスできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3551808/3f510877-a115-9499-0262-d00b8c21cf07.png)


コンソール画面は以下のように、左側に一覧、右側に設定項目という構成になっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3551808/1bcdcba9-606e-7adf-49da-5ee599550f52.png)



# レルムとは
一覧の上に、masterと書かれたプルダウンがあり、これは現在のレルムを表したものです。レルムとは、ユーザー、アプリ、ロール、グループといったオブジェクトを管理するための単位です。ユーザーはレルムに所属し、レルム単位でログを記録します。レルム同士はお互いに隔離されており、他レルムには干渉できません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3551808/4d5d0f35-d363-ea61-2362-467509a52992.png)


## レルムの作成
レルムのプルダウンからCreate Realmを選択すると、Create realm画面に移動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3551808/6371da34-2426-9487-4a47-cd8e7788daf2.png)
各項目の説明は以下の通りです。
|項目名  |説明  |
|---|---|
|Resource file  |Keycloakはレルムの設定情報をすべてJSONに書き出すことができます。JSONをここからアップロードできます。|
|Realm name  |レルムの名前を設定します。|
|有効|レルムを無効にすることができます。無効にした場合、ユーザーやクライアントがレルムにアクセスできなくなります。|

レルムの作成に成功すると、以下のような画面が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3551808/74ceb21f-59d2-6814-0228-8fce71b0f266.png)



# クライアント
クライアントの作成、設定を行うことができます。作成時は、OpenID Connect,SAMLを選択してクライアントを作成できます。また、JSONやXMLからクライアントを作成することもできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3551808/320ee01b-102d-9834-8767-36bd3c8fccbb.png)
Create clientを押すと、Create client画面に移動します。

#### OpenID Connectを選択してクライアントを作成した場合
以下のようにOpenID Connectを設定できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3551808/69fbae47-d316-7b8f-51cb-e05842593032.png)

次へを押すと、以下の画面になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3551808/2631d6eb-aa6b-736d-37a8-24f705f4a690.png)

各項目の説明は以下の通りです。
|項目名  |説明  |
|---|---|
|クライアント認証  |オフにするとパブリッククライアントに、オンにするとコンフィデンシャルクライアントに設定できます。  |
|認可  |詳細な認可のサポートを設定できます。コンフィデンシャルクライアントでのみ利用できます。  |
|Authentification flow|フローを選択できます。<br>● 標準的な認可コードによるリダイレクトベースの認証　認可コードフローのオンオフ <br>● ダイレクト・アクセス・グラントのサポート　リソース・オーナー・パスワード・クレデンシャル・グラントのオンオフ <br>● 認可コードなしのリダイレクト・ベース認証のサポート　インプリシットフローのオンオフ <br>● クライアント・クレデンシャル・グラント　クライアント・クレデンシャル・グラントのオンオフ。コンフィデンシャルクライアントでのみ利用できます。 <br>● OAuth 2.0 Device Authorization Grant　デバイスフローのオンオフ <br>● OIDC CIBA Grant　CIBAフローのオンオフ|

次へを押すと、以下の画面になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3551808/e31abf76-ee59-bb4b-956e-2ce670269686.png)

各項目の説明は以下の通りです。
|項目名  |説明  |
|---|---|
|ルートURL  |相対URLが設定されている場合、その前にルートURLが追加されます。 |
|認証サーバーがクライアントへのリダイレクトまたは戻るリンクを必要とする際に使用するデフォルトURLを設定します。  |認証サーバーがリダイレクトしたり、アプリに戻る際に使われるURLです。 |
|有効なリダイレクトURI|ログイン後のリダイレクト先として、有効なパターンを登録します。|
|Valid post logout redirect URIs|ログアウト後のリダイレクト先として、有効なパターンを登録します。|
|Webオリジン|許可するCORSオリジンを登録します。|

#### SAMLを選択してクライアントを作成した場合
以下のようにSAMLを設定できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3551808/b18f8873-d7a5-a920-f85d-ad78536c3f8e.png)

次へを押すと、以下の画面になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3551808/3f05c617-f607-3992-85c4-9380290ad4dd.png)


各項目の説明は以下の通りです。
|項目名  |説明  |
|---|---|
|ルートURL  |相対URLが設定されている場合、その前にルートURLが追加されます。 |
|認証サーバーがクライアントへのリダイレクトまたは戻るリンクを必要とする際に使用するデフォルトURLを設定します。  |認証サーバーがリダイレクトしたり、アプリに戻る際に使われるURLです。 |
|有効なリダイレクトURI|ログイン後のリダイレクト先として、有効なパターンを登録します。|
|Valid post logout redirect URIs|ログアウト後のリダイレクト先として、有効なパターンを登録します。|
|IDP Initiated SSOを行う際に~|IDP Initiated SSOを行う際にクライアントを参照するためのURLフラグメント名を登録します。|
|IDP Initiated SSOのRelayState|IDP Initiated SSOを行う際のSAMLリクエストで送信したいRelayStateを登録します。|
|SAMLを処理するマスターURL|このURLがSPのアサーション・コンシューマーおよびシングル・ログアウト・サービスの両方のBindingに使われます。|

#### クライアント詳細画面
![localhost_8080_admin_master_console_ (15).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3551808/9956a99c-13aa-3ff6-b4c5-71f648da86b3.png)

クライアント作成後、詳細画面から前述のクライアントに関する項目に加えて、ログイン・ログアウトに関する詳細を設定できます。


# クライアント・スコープ
クライアントに付与するスコープを作成できます。アクセス権限をアクセストークンに設定することができ、リソースへのアクセス時に所有者への同意を求める必要がある場合に有用です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3551808/8204d660-ec40-6447-52a2-c5ee0f7e40b1.png)


Create client scopeを押すと、クライアント・スコープの作成画面に移動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3551808/b5644ede-7ead-ae4e-b36f-e8545bbe30fc.png)

各項目の説明は以下の通りです。
|項目名  |説明  |
|---|---|
|クライアント・スコープの名前|クライアント・スコープの名前。レルム内で一意に命名する。|
|説明  |クライアント・スコープの説明。|
|タイプ|クライアント作成時に自動付与されるクライアントスコープのタイプを設定する。<br>● None　自動付与をしない <br>● DEFAULT　DEFAULTタイプで自動付与する。 <br>● OPTION　OPTIONタイプで自動付与する。 |
|プロトコル|プロトコルを設定する。OpenID ConnectとSAMLの二値。|
|同意画面で表示する|同意画面でテキストを表示するかどうかを設定できます。|
|同意画面のテキスト|上の"同意画面で表示する"がオンの時、表示するテキストを設定できます。|
|トークンスコープに含める|オンの場合、このクライアント・スコープの名前がアクセストークン・プロパティーの「scope」と同様にトークン・イントロスペクション・エンドポイントのレスポンスに追加されます。|
|GUI（同意ページのような）でのプロバイダーの順序を整数で指定します。 |同意画面における表示順序を指定します。|

# レルムロール
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3551808/d66d62b9-47cc-8dc0-3d6c-d771c8e681ad.png)
前述のクライアントスコープにレルムロールを割り当てることで、アクセストークンのアクセス権限を設定できます。この画面では、レルムロールの管理を行います。

Create roleを選択すると、レルムロールの作成画面に移動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3551808/71e6c20b-960c-56a9-81ee-5bc14b3d21dd.png)


各項目の説明は以下の通りです。
|項目名  |説明  |
|---|---|
|ロール名  |レルムロールの名前を設定します。|
|説明  |レルムロールの説明を記述できます。|

# ユーザー
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3551808/f88567f7-7bce-aac1-177d-c3176e068f61.png)
ユーザーとは認可や認証を行う単位のことです。この画面ではユーザーの管理を行うことができ、ロールの付与などが可能です。ユーザーの追加を押すと、Create user画面に遷移します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3551808/84288cf1-f6b3-d5f3-672b-6f58ffe8da0d.png)
各項目の説明は以下の通りです。
|項目名  |説明  |
|---|---|
|必要なユーザー・アクション  |初回ログイン時に設定が必要な項目を選択します。|
|ユーザー名  |ユーザー名を設定します。|
|Eメール|メールアドレスを設定します。|
|Eメールが確認済み|ユーザーのEメールが確認済みかどうかを設定します。|
|名|名を設定します。|
|性|苗字を設定します。|
|メンバーであるグループです。グループから外すには、グループを選択して「外す」ボタンをクリックしてください。|所属するグループを設定します。|

# グループ
Keycloak23.0.7では項目名が「メンバーであるグループです。グループから外すには、グループを選択して「外す」ボタンをクリックしてください。」となってしまっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3551808/82ac5dd4-e2e8-ccb2-6338-d2098d749a92.png)
ユーザーをまとめるグループの設定を行います。グループを使うことで、複数のユーザーにまとめてリソースを持たせることができます。また、グループにロールを付与することもできます。グループの作成を押すと、Create a groupのダイアログが現れます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3551808/a7f88d2d-3cb5-5bb6-e0a0-575ccf756cd6.png)

# セッション
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3551808/e6d7db06-1231-b676-b9a2-dd3b43c2b7cd.png)
ユーザー・クライアントのセッションを管理します。

# イベント
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3551808/87fcf336-cf5e-c667-23a8-da4f96c3bd63.png)
トークンリクエストやユーザーのログイン失敗など、イベントを管理します。

# レルムの設定
### 一般
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3551808/dffc157e-1f70-43ff-62b5-0ba8fbf4c8cf.png)
レルムIDやフロントエンドURLなどの一般的な項目を設定できます。
### login
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3551808/b70ae2f1-643a-1b20-47c7-6cb16946c321.png)
自身でのユーザー作成や、パスワードを忘れた場合の救済措置、Eメールでのログインの可否を設定できます。

### Eメール
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3551808/ab79741d-fb3b-cf5f-b3c9-64ba52967635.png)
メール認証やパスワード復旧などの際、keycloakがユーザーに送るメールの設定ができます。また、SMTPサーバの設定もここで行います。


### テーマ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3551808/a5857ad5-a68c-23ee-bf1c-5c6752d8c5f3.png)
UIのテーマを変更できます。

### 鍵
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3551808/f9227ada-0227-9361-c05e-a488903a4498.png)
Keycloakのトークンの署名などに利用する暗号鍵を設定・管理できます。

### イベント
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3551808/ace4942a-9d19-a349-712a-d150b7534ae6.png)
イベントに関する設定ができます。

### Localization
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3551808/7a63710c-6e59-dada-a5e2-b3737a25968d.png)
Keycloak上でサポートする言語を設定できます。

### セキュリティー防御
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3551808/2dd10f14-4d15-0e0d-155b-0d42c0134797.png)
クリックジャッキングやXSSなどの脆弱性に対するKeycloakの設定を変更できます。

### セッション
![localhost_8080_admin_master_console_ (16).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3551808/256e53b1-1ca8-02f0-7f3f-2b2b71158af5.png)
セッションに関するタイムアウト等を設定できます。

### トークン
![localhost_8080_admin_master_console_ (17).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3551808/5c89e724-db20-0b68-7961-fd3594a04fe8.png)
トークンに関するタイムアウト等を設定できます。



### Client policies
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3551808/bd5115f0-ec0f-c59b-06ec-e7c38a796e0f.png)
Keycloakの設定間違い等による脆弱性を回避するために、所定の条件を満たしているかを自動でチェックする機能です。


### ユーザー登録
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3551808/ba27b94e-d5b2-dc8f-173a-be7766f8d5ba.png)
ユーザーへのデフォルトロールの割り当てなど、ユーザーに関する設定ができます。

# 認証
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3551808/650066c0-4b7c-ad73-72db-c281fc6c3f8d.png)
フローの作成・管理ができます。Create flowを押すと以下の認証フローの登録画面に移動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3551808/133a520b-5561-2093-9d7a-5a687799c63c.png)
ここでは、ユーザー独自の認証フローを作成することができます。

# アイデンティティー・プロバイダー
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3551808/6e12d323-7650-feea-22dc-1796115bac3a.png)
標準のFacebook,Googleに加えて、他のIdPを追加できます。ユーザーはIdPにログインする際、追加されたものの中から選ぶことができます。

# ユーザー・フェデレーション
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3551808/8e584dc7-1bf0-cae2-ebbe-31ab398dd3e1.png)
外部に存在するユーザー情報を認証に利用する、ユーザーストレージフェデレーションを設定できます。

# 参考
 - [Keycloakの公式ドキュメント](https://www.keycloak.org/documentation.html)
 - [Openstandiaによる日本語ドキュメント](https://keycloak-documentation.openstandia.jp/)