Keycloakの操作について

## 目次
- Keycloakのイメージ
- Keycloakの実行
- Master Realmの作成
- 子Realm1とユーザーの作成
- アプリケーシの設定
- スコープ、マッパーの作成とクライアントにスコープを設定する
- ユーザー属性の設定
- アクセストークンの内容確認
- Keycloak設定エクスポート

## 参考サイト
[Keycloak Getting Started Guide](https://www.keycloak.org/docs/latest/getting_started/)

## Keycloakのイメージ
KeycloakをID Providerとして、RESTfulAPIが動くリソースサーバーを作る。
Realmは、以下のようなイメージになる為、これからは、Master Realm, Realm1, User等を作成する。

```
Master Realm (アドミン：その他のrealmを管理する)
    |-Realm1 (ここでユーザーとアプリケーションを作成する)
    |    |- User -> Application
    |-Realm2 (ここでユーザーとアプリケーションを作成する)
    |   |- User -> Application
    |-Realm3 (ここでユーザーとアプリケーションを作成する)
    |    |- User -> Application
```

## Keycloakの実行
### ①Keycloakの実行ファイルから実行する方法
Keycloakをダウンロードして解凍し、bin/standalone.batを実行し、起動する。
https://www.keycloak.org/downloads.html
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/602725/7833bfd8-0285-48fa-1feb-48460b902c32.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/602725/1146861e-e65e-63a3-e76f-e6f40e72a00b.png)

### ②dockerからKeycloakを実行する方法
DockerとKeycloakで世界最速OpenID Connectの為、DockerからKeycloakを実行する事にする。
参考サイト：https://www.keycloak.org/getting-started/getting-started-docker

ログインユーザーは、admin/adminになる。

```
docker run -p 8080:8080 -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=admin quay.io/keycloak/keycloak:12.0.1
```

ポート変更後は以下になる。

```
docker run -p 8088:8088 -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=admin quay.io/keycloak/keycloak:12.0.1
```

ポート番号変更方法

```
docker run -p 8088:8088 -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=admin quay.io/keycloak/keycloak:12.0.1 -Djboss.http.port=8088
```

## Master Realmの作成
以下リンクを実行し、Keycloakのmaster realmを作成する。
http://localhost:8080/auth/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/602725/3b450429-7fea-c9b6-2f2a-21e14088a032.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/602725/738a67e9-f141-7d58-48c7-25e1d750310a.png)


## 子Realm1とユーザーの作成

- Realm1の作成：Administration Consoleをクリックし、作成したmaster realmでサインインする。 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/602725/762e895f-ddf9-0b96-93da-7a70a9aa2308.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/602725/0d3df26a-490c-8064-c6c5-ff88d1fe7832.png)

- メイン画面が表示される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/602725/1c0252f1-4c6b-3cfa-dca8-4bd7fd276487.png)

- Realm1を作成する為、[Add realm]を押下して作成する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/602725/f28333e5-b588-8d79-628f-e11efd235491.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/602725/d189b812-8b16-2bd1-1b55-fdffded80461.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/602725/7188b8a1-04e4-92d1-dae6-eae22dbd7e98.png)

- ユーザーの作成：メニューから[Users]を選択し、右側の[Add user]を押下する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/602725/a7082ece-49ac-7064-2f44-f304b8ce8e75.png)

- ユーザー名を入力し、保存する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/602725/4c60c719-2460-274b-cfd0-1d626c39f8f7.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/602725/d3f290ac-a251-abb6-b8e2-c31be45731d6.png)


- ユーザーの氏名設定：[Details]にて、氏名を入力し、保存を押下する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/602725/97e39b04-0eca-bbd4-e6b7-549aa5692b30.png)

- ユーザーが最初ログインする為、仮パスワードを設定する必要がある。
- [Credentials]にて仮パスワードを入力し、セットパスワードを押下する。
- これで作成したユーザーでサインイン出来るようになる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/602725/1249ce4a-0806-b5e0-b0a2-3c0794092d8d.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/602725/711b471c-0e35-d2db-462a-66cc48212457.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/602725/b2e60fae-10d6-1173-1610-097005046862.png)

## ユーザーサインイン
- 作成したRealm1に対しての以下リンクから[Personal Info]をクリックし、作成したユーザーでサインイン出来る。<br/>
http://localhost:8080/auth/realms/realm1/account/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/602725/00630932-96ec-7a1c-5b35-4b37d362271a.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/602725/f50b7280-b6dc-c8ce-a95d-14a87276a6fe.png)


## アプリケーシの設定
- 最初は、対象のアプリケーションをKeycloakインスタンスに登録することである。
- Master Realmでサインインし、クライアントを作成する。
- [Clients]から[Create]ボタンを押下する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/602725/b51d6d81-c2ba-bb92-8683-0e59e3e5b84c.png)

- クライアント名とルートurlを入力し、保存ボタンを押下する。
- テストの為、KeycloakWebサイトのSPAテストアプリケーション「https://www.keycloak.org/app/ 」を利用する予定にする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/602725/0914a6de-08bf-c0fe-9c95-85081cc77825.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/602725/de5f89a8-5c39-e94c-f988-76e083bd7940.png)

- KeycloakWebサイトのSPAテストアプリケーションにて、情報を登録する。
https://www.keycloak.org/app/

- 保存すると、デフォルト設定で利用出来るようになる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/602725/3218a726-51ec-a324-f9bd-c86033101d83.png)

- [Sign in]をクリックして、以前に起動したKeycloakサーバーを使用してこのアプリケーションを認証できるようになりる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/602725/0fb250ec-04bd-984d-77a9-8d76eb644120.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/602725/c2fd7214-a34b-02fe-0d39-7fa2f10e08eb.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/602725/dc00a8c2-d77d-6dc8-3f65-66f130003eb8.png)

## スコープ、マッパーの作成とクライアントにスコープを設定する
### スコープの作成
- [Client Scopes]から[Create]をクリックする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/602725/805aefd8-a7c2-0459-f4c7-c6bea7042116.png)

- 赤枠の項目を入力し、[保存]ボタンを押下する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/602725/2274a89f-41f3-b3de-e977-65ac0389074c.png)


### マッパーの作成
- [Client Scopes]の[Mappers]にて[Create]をクリックする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/602725/3df74784-2056-2c1c-ace3-fbd7b42aa842.png)

- 赤枠の項目を入力し、[保存]ボタンを押下する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/602725/10dc1196-a507-f732-9119-9d49fc4d961b.png)

### クライアントにスコープを設定
- ①[Clients]にて対象クライアントを選択する。
- ②[Client Scopes]タブにて、[Optional Client Scopes]中の対象スコープを選択し、[Add selected]を押下する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/602725/7c63dbdb-1376-9f4b-3cd7-2419b9e25c8a.png)

## ユーザー属性の設定
- ユーザー属性の設定には、スコープ作成時指定した[User Attribute]の属性の値をユーザーにセットする事になる。
- [Users]メニューから対象ユーザーを選択し、[Attributes]タブにて、以下を設定し[Add]を押下する。最後に[Save]を押下する。<br/>
Key   : スコープ作成時指定した[User Attribute]の値<br/>
Value : スコープ作成時指定した[Token Claim Name]の値
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/602725/364c0a0c-e147-7962-c095-3f229a9745b9.png)

## アクセストークンの内容確認
- アクセストークンの内容は、Keycloakにて確認出来る。
- [Clients]メニューから対象クライアントを選択し、[Client Scopes]タブの[Evaluate]タブをクリックする。
- [Client Scopes]にて対象スコープを選択し、[Add selected]を押下する。[User]に対象ユーザーを選択し、[Evakuate]ボタンを押下する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/602725/ebfae94c-e4d2-7a9e-1795-0d27ad1488c6.png)

- [Generalted Access Token]タブにて内容が確認出来る。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/602725/021d5f12-1ccd-ad9c-f8a9-9690f585ce96.png)


## Keycloak設定エクスポート
[Export]メニューを押下し、赤枠の設定を行い[Export]ボタンを押下する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/602725/c0c9d8ce-e699-2748-9962-74b70396e7e6.png)