Keycloakによるシングルサインオン環境の構築
このハンズオンでは、仮想サーバー内にGUIをセットアップして作業することも可能です。
目次
- 1 概要
- 2 仮想サーバーの用意
- 3 Keycloak検証環境(development mode)を構築
- 4 Keycloak管理画面にログイン
- 4.1 Keycloak検証環境の設定
- 4.1.1 レルムの作成
- 4.1.2 ユーザーの作成
- 4.1.3 作成したユーザーのログイン確認
- 4.2 OpenID Connect の確認
- 4.2.1 クライアントの作成 ( SSO対象のアプリ登録 )
- 4.2.2 クライアントの動作確認
- 4.3 SAMLの確認
- 4.1 Keycloak検証環境の設定
- 5 参考資料
- 5.1 Keycloak 公式ドキュメント
- 5.2 Qiita など、公式以外
- 5.3 関連教材
概要
仮想サーバーの用意
例として、仮想環境としてVirtualBoxを使っていますが、他の仮想環境でも構いません。
< 以下は、VirtualBoxを使った場合の例 >
仮想サーバーのスペック
OS:Ubutnu Server 22.04
仮想CPU割り当て数 : 1
仮想メモリ割り当て:4096MB(4GB)以上
仮想ディスク:64GB以上
ネットワーク設定:NAT + ホストオンリーアダプタの構成。ホストオンリーアダプタには、固定IPを割り当てること。
デスクトップ環境:なし
SSH接続:必須 ( ユーザー名 + パスワードでもOK )
仮想サーバー の設定
ホストオンリーアダプタのIPアドレス例:192.168.125.10 << 文中でIPアドレスという場合、ホストオンリーアダプタのIPアドレスを指します。
Your server’s name (ホスト名):node0
ユーザー名 : vboxuser
パスワード:任意のもの
Keycloak検証環境(development mode)を構築
Docker Engine および Docker Compose 環境のセットアップ
仮想サーバーにデスクトップ環境をインストール
デスクトップ環境(GUI)を使用したい場合は、下記を参考にインストールしましょう。但し、仮想マシンの消費メモリが増えるため、パソコン自体の物理メモリが少ない場合(たとえば、8GB以下)は、複数の仮想マシンを同時起動しないこと。
https://mydocument.atlassian.net/wiki/spaces/support4textbook/pages/1675264052
Docker Engine および Docker Composeのインストール
Docker EngineおよびDocker Composeをインストールしていない場合は、次のコマンドを実行します。すでに導入済みの場合は、「Keycloak検証環境の構築」の作業に移動してください。
curl -fsSL https://get.docker.com -o get-docker.sh && sudo sh get-docker.sh
sudoなしで実行できるように、作業用ユーザーをDockerグループに所属させます。
sudo groupadd docker
sudo usermod -aG docker $USER
再起動します。
sudore reboot
Keycloak検証環境の構築
作業用ディレクトリを作成します。
docker-compose.ymlを作成します。後々使う、ローコードプラットフォームの「Budibase」検証環境もセットアップしてしまいます。
記述内容はこちらです。
docker-compose.yml を起動すると、コンテナイメージの取得に時間がかかるので、コンテナイメージを先に取得しておくと時短になります。
コンテナの起動
Keycloak管理画面にログイン
Webブラウザで、http://IPアドレス:18080/admin(例 http://192.168.125.10:18080/admin)にアクセスします。
Username は「docker-compose.yml」内で「KEYCLOAK_ADMIN」に記述した値、Passwordは「docker-compose.yml」内で「KEYCLOAK_ADMIN_PASSWORD」で記述した値を用います。
ログインすることで、下図のように表示されます。画面左上の「三」をクリックすることで操作メニューが表示されます。
Keycloak検証環境の設定
レルムの作成
表示されている画面左上の「master ▼」をクリックします。表示された「Create Realm」をクリックします。
「Realm name」に、「myrealm」を入力します。「Create」をクリックします。「Realm created successfully」というメッセージが表示されます。
ユーザーの作成
Keycloak管理画面で、画面左上の「三」>>「Users」>>「Create new user」の順にクリックします。
「Create user」フォームにて、ユーザー作成を行います。例として、下図のように入力します。入力後、「Create」をクリックします。
Username : testuser1
Email : testuser1@example.com
「Credentials」タブをクリックします。「Set password」をクリックします。
作成したユーザーのパスワードをセットします。例 QvyASrb7qK734uV
また、「Temporary」を「off」にします。「Save」をクリックします。
「Save password」をクリックします。
「Details」タブに切り替え、「Save」をクリックします。
作成したユーザーでログインできるか確認するために、画面右上のユーザー名( ここではadmin ) >> 「Sign out」の順にクリックします。
作成したユーザーのログイン確認
Keycloakのアカウントコンソールにアクセスします。例 http://192.168.125.10/realms/myrealm/account
Keycloakのアカウントコンソールが表示されます。「Sign In」をクリックし、作成したユーザーでログインします。「Personal Info」の画面が表示されます。
ログイン後、画面右上にユーザーのフルネームが表示されます。ログインしているユーザー情報を変更する場合は「Personal info」から、ログインしているユーザーが使用可能なアプリケーションを確認するには、「Applications」をクリックして確認することができます。また、パスワードを変更したい場合は、「Account Secutiry」の「Signing In」から、パスワードを「Update」することでパスワードを変更することができます。「Device activity」をクリックすることで、ログイン履歴を表示することができます。ログアウトする場合は、「Sign out」をクリックします。
OpenID Connect の確認
クライアントの作成 ( SSO対象のアプリ登録 )
Keycloak管理画面にログインします。先ほど作成したレルムに切り替えます。Keycloakの管理画面のURLは、http://IPアドレス:18080/admin(例 http://192.168.125.10:18080/admin)のようになっています。
レルムを切り替えた後、画面左上の「三」>>「Clients」>>「Create client」の順にクリックします。
「Client type」に「OpenID Connect」、「Client ID」に「myclient」の値を設定し、「Next」をクリックします。
「Standard flow」にチェックが入っていることを確認します。「Next」をクリックします。
下記の項目に値をセットします。セットと、「Save」をクリックして設定を保存します。
Valid redirect URIs:https://www.keycloak.org/app/*
アプリのログイン時に、Keycloakにリダイレクトさせる元になるURL。今回は、Keycloakのサンプルアプリを流用する。
Web origins:https://www.keycloak.org/
クライアント名「myclient」が作成されます。
クライアントの動作確認
Webブラウザで、シークレット・ウィンドウ(Chromeの場合)を使い、https://www.keycloak.org/app/ にアクセスします。
画面内の各項目に値を入力します。入力後、「Save」をクリックします。
Keycloak URL:http://IPアドレス:18080(例 http://192.168.125.10:18080)
Realm:myrealm << 作成したレルム名
Client:myclient << 作成したクライアント名
「Sign in」をクリックします。
Keycloackのログイン画面が表示されます。作成済みのユーザー( 例 testuser1 )でログインします。
ログインが成功すると、次のように表示されます。
SAMLの確認
クライアントの作成 ( SSO対象のアプリ登録 )
Keycloak管理画面にログインします。Keycloakの管理画面のURLは、http://IPアドレス:18080/admin(例 http://192.168.125.10:18080/admin)のようになっています。
先ほど作成した「myrealm」レルムに切り替えます。
レルムを切り替えた後、画面左上の「三」>>「Clients」>>「Import Client」の順にクリックします。
https://sptest.iamshowcase.com/testsp_metadata.xml をダウンロードします。
https://sptest.iamshowcase.com/testsp_metadata.xml に新しいタブあるいは新しいウインドウでアクセスし、右クリックから「名前を付けて保存」で、「testsp_metadata.xml」をダウンロードします。
Keycloakの「Import client」で、「Browse」をクリックし、「testsp_metadata.xml」を読み込みます。下図のように表示されます。画面下に表示される「Type」が「saml」であることを確認した後、「Save」をクリックします。
クライアントを作成することができました。
Keycloakを、IdPにするためのMetadataをダウンロード
IdPとは、Identify Providerの略称です。ユーザーの認証情報を保管・管理・提供する仕組みのことです。IdPのMetadataをダウンロードし、先ほどの「クライアント」で指定したアプリケーション(SP=Service Probider)で読み込ませることで、SPとIdPの連携ができます。
「クライアント」が属する「レルム」の「Realm Settings」にアクセスします。
「SAML 2.0 Identity Provider Metadata」をクリックします。
XMLデータが表示されますので、右クリックから「名前を付けて保存」で、「descriptor.xml」をダウンロードします。
RSA SAML Test Service Providerによる動作確認
新規にタブを開き、https://sptest.iamshowcase.com/instructions にアクセスします。「Setting up SP initiated SSO」が表示されるので、画面下に移動します。「CHOOSE FILE」をクリックし、「descriptor.xml」を読み込みます。「SUBMIT FILE」をクリックします。
表示されたURLをメモします。
別のWebブラウザを起動するか、シークレットウィンドウを用意し、メモしたURLにアクセスします。アクセスすると、Keycloakのレルムの認証画面に遷移します。
レルム作成時に作成したユーザー名とパスワードでログインします。
RSAのSAMLテストアプリに、Keycloakに作成したユーザーでログインすることができました。
Keycloak側のクライアントも見てみましょう。「Clients」から「IAMShowcase」をクリックします。
「IAMShowcase」クライアントの詳細画面で、「Sessions」タブを表示します。先ほどログインに使用したユーザーのセッションを確認することができます。
参考資料
Keycloak 公式ドキュメント
困ったときは、最初に公式ドキュメントを見ること。日本語であっても、公式ドキュメント以外は情報が古いことがあり、記載内容通りに動作しないことが多々ある。
https://www.keycloak.org/documentation
Qiita など、公式以外