KeycloakをWinServer2022のHyper-V上で動かす

# やることリスト
1. Hyper-Vにdebianを入れる
1. CentOS7にKeycloakを入れる
1. KeycloakとADを紐付ける
1. GoogleWorkspaceと紐付ける

## 参考文献

https://www.server-world.info/query?os=Windows_Server_2022&p=hyper-v

https://qiita.com/ryota_i/items/69ded3fd950c7f9b70f5#%E8%B5%B7%E5%8B%95%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B

https://qiita.com/ichiya_qiita/items/c7b7cf5074525207128b

https://cloud.google.com/architecture/identity/keycloak-single-sign-on?hl=ja

https://www.keycloak.org/guides

## 1.Hyper-Vにdebianを入れる
サーバーマネージャーのツールからHyper-Vマネージャーを開く
※なければ 管理 → 役割と機能の追加 → 役割の選択でHyper-Vを選択して進めればOK(再起動必須)

ISOは

https://www.debian.org/download

からダウンロードしておく。サーバが物理DISK読み込めるならそれでも大丈夫っぽい
自分はNetInstallをダウンロードしてきた。

とりあえず順番に進めていけばOK

### debianのインストール手順

Graphical installを選択して順番に進めていく

ネットの接続設定
DNSでADの名前解決ができるように上位のADのDNSを設定しておくと吉

ソフトウェアの選択は特にチェックなくてもOK
※GUIが欲しければチェック入れておく

インストール中にrootと初期Userの設定をしておく。

終わったら再起動かけてrootでも初期ユーザーでrootに上がってもいいので管理者権限にする

## 2.debianにKeycloakを入れる

とりあえずパッケージの更新と必要な物を引っ張ってくる。

```
# apt update && apt upgrade -y
# apt install -y wget vim openjdk-17-jdk
```
終わったら一旦再起動。
最新版は

https://www.keycloak.org/

こっからダウンロードできるのでtar.gzをダウンロードする。
※起動するシステムがローカルからブラウザでアクセス出来ない場合環境変数に下二行を入れる必要あり。
```
# wget https://github.com/keycloak/keycloak/releases/download/24.0.3/keycloak-24.0.3.tar.gz
# tar zxvf keycloak-24.0.3.tar.gz
# export KEYCLOAK_ADMIN=　<username>
# export KEYCLOAK_ADMIN_PASSWORD=　<password>
```
展開し終わったらディレクトリに行って実行する。

```
# cd keycloak-24.0.3.tar.gz
# bin/kc.sh start-dev
```
Updating the ~~
が出てしばらくしたら色々出てくるからブラウザからサーバーのIPの8080にアクセスする。

環境変数で指定したパスワードとユーザー名を入れるとログインできる

![スクリーンショット 2024-05-08 221814.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3786212/080936d7-09da-8f10-81e0-5256d0498231.png)
右上のKeycloakからCreate realmで適当にrealmの名前を付けてcreateする。
日本語化はRealm settingsのLocallzationからjapaneseで設定できる。

## 3. KeycloakとADを紐付ける
User federationからAdd LDAP providerで設定する。

UI名は適当に。
Connection URLは　ldap://\<ADのIP>
Bind DNは cn=Administrator,cn=Users,dc=ドメインの一番上(exampleとか),dc=ドメインの一番上(comとか)
必要であればdcを足していけばOK
![スクリーンショット 2024-05-08 223508.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3786212/d89e2202-6a5a-22c3-be21-33989e96990b.png)
あとはUserDNだけ変えて完成

![スクリーンショット 2024-05-08 224042.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3786212/1e2dcfbd-1a3a-d7b8-6493-141427a9351f.png)

### ログインチェック
http://\<KeycloakのIP>:8080/realms/\<realmの名前>/ldap/account/
にアクセスしてADのユーザーでログイン出来たらOK

## 4. GoogleWorkspaceと紐付ける

Adminのアカウントから入り設定したRealmのClientに行きCreate Clientから設定する。
![スクリーンショット 2024-05-08 225713.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3786212/33f9789c-fd66-6153-c5e7-f6d37ea29e3b.png)
NextからValid redirect URIsにhttps://www.google.com/*を設定してSave

Settingsタブから写真のように設定してSave
![スクリーンショット 2024-05-08 225927.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3786212/65062550-6ef6-66f3-e24a-f0392f2bdced.png)

Keysタブに移動してClient signature required を外してSave

左のメニューからRealms settingsを選択してKeyタブのRS256のCertificateをコピーする。
![スクリーンショット 2024-05-08 230333.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3786212/f9636677-0c06-22c2-44d5-0d19065ace58.png)

適当にNotePadとかを開き、
```
-----BEGIN CERTIFICATION-----
MIICmz................................................................
-----END CERTIFICATION-----
```
のような形にして適当な名前で拡張子を.pemにして保存
![スクリーンショット 2024-05-08 230658.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3786212/8b798c32-f105-1e83-8d50-60b376f22a9c.png)

### Google側の設定

https://admin.google.com/?hl=ja

を開き
左のメニュータブからすべてを表示にし、セキュリティ、認証、サードパーティの IdP による SSOを開く
![スクリーンショット 2024-05-08 231438.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3786212/6acbc2f5-a81d-8afa-6b09-4f141bc88dfc.png)

SSOプロファイルの追加から設定する。
サードパーティの ID プロバイダで SSO を設定するにチェックを入れ、
ログインページのURLには
http://\<KeycloakのIP>:8080/realms/\<realm名>/protocol/saml
ログアウトページのURLには
http://\<KeycloakのIP>:8080/realms/\<realm名>/protocol/openid-connect/logout
を入力し、先ほどのpemファイルをアップロードして
ドメイン固有の発行元を使用のチェックを外す。
パスワード変更用のURLには
http://\<KeycloakのIP>:8080/realms/\<realm名>/account
を入力して保存。

Workspace上に別のアカウントを作って、ADにアカウント追加して、Usersから同じメアドを設定しておく。

### TESTしてみる。
新しいプライベートウィンドウで

https://console.cloud.google.com/?hl=ja

を開く。作ったアカウントでログインしてKeycloakに飛ばされれば成功。


# お疲れさまでした。

はじめてQiita書いたので不十分な点も多かったと思いますが参考になったら幸いです。
参考にさせていただいたサイトではCentOSを使ってましたが、個人的にdebianが好きなのでdebianで構築しました。
改めて参考にさせていただいたサイトの作成者様ありがとうございます。

それではよいSSOライフを！