Keycloakによるシングルサインオン環境の構築

このハンズオンでは、仮想サーバー内にGUIをセットアップして作業することも可能です。

目次

概要

仮想サーバーの用意

例として、仮想環境として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」で記述した値を用います。

ログインすることで、下図のように表示されます。画面左上の「三」をクリックすることで操作メニューが表示されます。

image-20240507-063547.png

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 など、公式以外

関連教材