Keycloakの管理コンソールの機能をみてみる（利用者編）、ユーザー・アカウント・サービス

# 今日やること

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

Keycloakの管理コンソールには

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

があります。

今日は後者の「利用者向け機能（ユーザー・アカウント・サービス）」についてみてみます。


# 事前準備

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

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


# ユーザー・アカウント・サービスの概要
ユーザー・アカウント・サービスは、ユーザーが自身のアカウントを管理する機能になります。ブラウザを開き `http://localhost:8080/auth/realms/レルム名/account/` にアクセスし、利用者ユーザーでログインします。（レルム「demo」のユーザーでログインする場合は、 `http://localhost:8080/auth/realms/demo/account/` にアクセス）

ユーザー・アカウント・サービスは、画面左側がメニュー、右側が選択メニューに対する設定という構成になっています。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/208533/c3b2b7a6-86dd-7e12-436a-f8507f61f030.png)


レルムの国際化設定を有効にしている場合、画面右上部で言語設定を変更できます。また、画面右上部の「サインアウト」をクリックすることにより、Keycloakからサインアウトできます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/208533/b506d599-aa9c-f61e-9a45-ea60f57c176d.png)

それでは、ユーザー・アカウント・サービスの設定をみていきます。


# ユーザー・アカウント・サービスの設定項目

## アカウント
アカウント情報を設定する画面です。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/208533/890aca3f-2428-82bd-fb98-b620d6de9917.png)


|項目名|説明|
|:--|:--|
|ユーザー名|ユーザー名を指定する。<BR>レルム設定で「ユーザー名の編集」を無効にしている場合は編集できない。<BR>レルム設定で「Eメールをユーザー名とする」を有効にしている場合は表示されない。|
|Eメール|Eメールアドレスを指定する。|
|名|名を指定する。|
|姓|姓を指定する。|


## パスワード
パスワードを変更する画面です。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/208533/1c934781-8b6e-9825-b3c7-e259bfb8d978.png)

|項目名|説明|
|:--|:--|
|パスワード|現在のパスワードを指定する。|
|新しいパスワード|新しいパスワードを指定する。|
|新しいパスワード（確認）|新しいパスワードを指定する。|


## Authenticator
二要素認証を行うための設定画面です。「IDとパスワード」という一つの要素による認証から、「IDとパスワード」と「ワンタイムパスワード」による二つの要素による認証に変更し、セキュリティを強化することができます。

ワンタイムパスワードの方式としては、 `タイムベース（TOTP）` と `カウンターベース（HOTP）` が使用でき、ワンタイムパスワードのジェネレーターとしては `FreeOTP` や `Google Authenticator (Google認証システム)` 等が使用できます。 

![image.png](https://qiita-image-store.s3.amazonaws.com/0/208533/d2065d1a-221e-b6e6-4f25-ffba1b022bc3.png)

具体的な使用方法については、@naokiiiii さんが12日目に書いてくれる予定です！


## Federated Identities
外部IDプロバイダとのアカウント紐付けを行う画面です。レルムの設定で「アイデンティティプロバイダー」の設定を行っている場合に利用できます。

「アイデンティティプロバイダー」の設定については、@tamura__246 さんが15日目に書いてくれる予定です！

![image.png](https://qiita-image-store.s3.amazonaws.com/0/208533/2d2dee2a-35c2-167c-3640-81efdcb3e6c1.png)


## セッション
自身のセッションを管理する画面です。「全セッションからログアウト」リンクをクリックすると、全てのセッションがクリアされログアウト状態になります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/208533/540a854d-9c13-4fda-9fbf-b380b2ceeef7.png)


## アプリケーション
ユーザーが利用可能なアプリケーションを参照する画面です。アプリケーションとはレルム設定で定義したクライアントのことです。表示されるアプリケーション名は、クライアントの設定で「ベースURL」を設定している場合、「ベースURL」へのリンクが貼られます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/208533/1118ffdd-ab1c-926a-0d54-2dddde7ee742.png)


## ログ
ユーザーのイベントログを参照する画面です。レルムの設定で「ログインイベントの保存」を有効にしている場合に利用できます。ログを確認することにより、第三者による不正な操作がないかを確認することができます。

認証機能を提供する場合、セキュリティ要件としてユーザー自身のログイン履歴を参照できる機能が一般的に求められるので、この機能は最初からあるとうれしいですね :smile: 

![image.png](https://qiita-image-store.s3.amazonaws.com/0/208533/5cb60f08-0466-1a80-c91b-b3cb89935f66.png)


# ユーザー・アカウント・サービスのカスタマイズ
ユーザー・アカウント・サービスは、管理コンソールと異なり、アプリケーションの利用者である一般ユーザー向けの画面になります。一般ユーザー向けの画面の場合、利用企業のカラーやスタイルに合わせてカスタマイズすることが多いと思います。Keycloakはこういった画面のカスタマイズも簡単にできるようになっています。

見た目を変えたい場合は、テーマのカスタマイズを行うことができます。詳細は、[Keycloakのドキュメント](http://www.keycloak.org/docs/latest/server_development/#_themes)を参照下さい。

また、見た目以外のカスタマイズ要件として、「ユーザー属性を増やしたい」という場合があるかと思いますが、以下のように簡単に行うことができます。

**ユーザー属性「TEL」を追加する例**

テンプレートファイル `(KEYCLOAK_HOME)/themes/base/account/account.ftl` を、利用中のテーマのディレクトリにコピーします。例えば、利用中のテーマがkeycloakの場合、コピー先は `(KEYCLOAK_HOME)/themes/keycloak/account/account.ftl` になります。

コピーした `account.ftl` に、以下のコードを追加します。


```html
<div class="form-group">
   <div class="col-sm-2 col-md-2">
       <label for="user.attributes.tel" class="control-label">TEL</label>
   </div>

   <div class="col-sm-10 col-md-10">
       <input type="text" class="form-control" id="user.attributes.tel" name="user.attributes.tel" value="${(account.attributes.tel!'')?html}"/>
   </div>
</div>
```

Keycloak再起動後、アカウント画面を表示すると、カスタム属性「TEL」が追加されていることを確認できます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/208533/6964a8e2-72bf-9037-8d64-1ec6bf9f53f7.png)

属性のカスタマイズについての詳細は、[Keycloakのドキュメント](http://www.keycloak.org/docs/latest/server_development/index.html#custom-user-attributes)を参照下さい。


# まとめ
ざっとですが、「ユーザー・アカウント・サービス」についてみてみました。どの画面も分かりやすく、直感的に操作できると思います。


# 参考資料

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