OpenShift上のKeycloak

2018年5月31日 Stian Thorgersen 著

この記事では、OpenShiftにKeycloakをデプロイする方法を説明します。また、Node.jsベースのRESTサービスとHTML5アプリケーションをOpenShiftにデプロイし、Keycloakで保護する方法も学びます。

この例を示すスクリーンキャストは、https://youtu.be/9zUWqbK3BqI でご覧いただけます。

OpenShiftをまだお持ちでない場合は、MiniShift を使用して始めるのが良いでしょう。

Keycloakのデプロイ

まず最初に、ocコマンドを実行してOpenShiftに新しいプロジェクトを作成します。

oc new-project keycloak

次に、KeycloakテンプレートをOpenShiftにインポートするために、以下を実行します。

oc replace --force -f "https://raw.githubusercontent.com/jboss-dockerfiles/keycloak"\
"/master/openshift-examples/keycloak-https.json"

OpenShiftコンソールを開き、keycloakプロジェクトを開きます。

「プロジェクトに追加」をクリックし、「カタログを閲覧」をクリックします。カタログ内でKeycloakを見つけてクリックします。

情報画面で「次へ」をクリックします。構成で、「Keycloak管理者ユーザー名」と「Keycloak管理者パスワード」フィールドに覚えやすいユーザー名とパスワードを設定します。次に「作成」をクリックします。「プロジェクト概要に進む」をクリックします。

デプロイが完了するのを待ってから、アプリケーションへのリンクをクリックします。ブラウザは自己署名証明書であるため、証明書について警告を表示します。これを無視して続行してください。「管理コンソール」をクリックし、先ほど入力したユーザー名とパスワードでログインします。後で必要になるので、このタブを開いたままにしてください。

これで、OpenShift上にKeycloakをデプロイしました。

Keycloakでクライアントを構成する

保護するサービスとアプリケーションのためにクライアントを作成する必要があります。

Keycloak管理コンソールのタブを開きます。「クライアント」をクリックし、「作成」をクリックします。「クライアントID」に「service」と入力し、「保存」をクリックします。「アクセスタイプ」で「bearer-only」を選択し、「保存」をクリックします。

再度「クライアント」をクリックし、「作成」をクリックします。「クライアントID」に「app」と入力し、「保存」をクリックします。「有効なリダイレクトURI」と「Webオリジン」に「*」を入力します。本番環境では、アプリケーションの正しいURLを入力することが非常に重要ですが、これはデモンストレーションなので、ここでは簡単にするためにすべてのURLを許可します。デプロイ後、アプリケーションの正しいURLに簡単に更新できます。

後でまた必要になるので、Keycloak管理コンソールのタブを開いたままにしてください。

サービスのデプロイ

OpenShiftコンソールのタブに戻り、再度「プロジェクトに追加」をクリックし、「カタログを閲覧」をクリックします。今回は「Node.js」をクリックします。情報画面で「次へ」をクリックし、構成の下の「高度なオプション」をクリックします。

以下の変更を行います

KEYCLOAK_URLの値をKeycloakのURLに置き換えます。これを見つけるには、Keycloak管理コンソールのタブに戻り(URLを「/auth」までコピーします)。

「作成」をクリックし、「プロジェクト概要に進む」をクリックします。ビルドとデプロイが完了するのを待ってから、アプリケーションへのリンクをクリックします。「Not found!」と表示されるはずです。URLに「/service/public」を追加すると、JSONで「message: public」と表示されるはずです。

これで、サービスをデプロイして保護しました。後で必要になるので、このタブも開いたままにしてください。

アプリケーションのデプロイ

OpenShiftコンソールのタブに戻り、再度「プロジェクトに追加」をクリックし、「カタログを閲覧」をクリックします。今回は「PHP」をクリックします。情報画面で「次へ」をクリックし、構成の下の「高度なオプション」をクリックします。

以下の変更を行います

KEYCLOAK_URLの値をKeycloakのURLに置き換えます。これを見つけるには、Keycloak管理コンソールのタブに戻り(URLを「/auth」までコピーします)。また、SERVICE_URLの値をサービスのURLに置き換えます。これを見つけるには、サービスのタブに戻り(URLを「/service」までコピーします)。

「作成」をクリックし、「プロジェクト概要に進む」をクリックします。ビルドとデプロイが完了するのを待ってから、アプリケーションへのリンクをクリックします。すでにログインしているはずです。次に、「Invoke Public」をクリックして保護されていないエンドポイントを呼び出すか、「Invoke Admin」をクリックして管理者ロールで保護されたエンドポイントを呼び出すことで、サービスを呼び出すことができます。「Invoke Secured」をクリックすると、ログインしている管理者ユーザーにはユーザーロールがないため、失敗します。このエンドポイントも呼び出せるようにするには、Keycloak管理コンソールに戻ります。「user」という名前のレルムロールを作成します。次に、ユーザーに移動して管理者ユーザーを見つけ、ロールマッピングの下でユーザーロールをユーザーに追加します。

これで、アプリケーションをデプロイおよび保護し、アプリケーションが以前にデプロイしたサービスを安全に呼び出す方法を確認しました。