本連載では、近年注目されている認証プロトコル「OpenID Connect」をサポートするオープンソースのシングルサインオン(SSO)ソフトウェア「Keycloak」の活用方法を解説していきます。今回は、Keycloakクライアントアダプターを利用して、APIサービスを構築してみます。
連載第3回目となる今回は「Keycloak」が提供するクライアントアダプターを利用して、OpenID Connectに対応したAPIサーバとクライアントアプリケーションを構築します。Keycloakクライアントアダプターを利用すると、Keycloakと連携できるようになり、簡単にシングルサインオン(SSO)や公開APIサービスを実現することができます。
「クライアントアダプター」はKeycloakが提供するライブラリで、Keycloakからのアクセストークン取得やアクセス制御を行います(図1)。「Wildfly」や「Jetty」といったアプリケーションサーバ向けのアダプターや、「Spring Framework」などのフレームワーク向けのアダプターが提供されています。
今回は、WildflyアダプターとSpring Framework用アダプターを利用します。それ以外のアダプターを利用する場合は、Keycloakの公式ドキュメント「Securing Applications and Services」を参照してください。
今回構築するアプリケーションは、以下の図2のようになっています。なお、これらのサンプルはGitHubのリポジトリ(https://github.com/Hitachi/Keycloak-adapter-examples)で公開しているので、ぜひ活用してください。
APIサーバはユーザー向けと管理者向けのAPIエンドポイントを持ち、KeycloakのWildflyアダプターでアクセス制御が行われています。今回は以下の構成で作成しました。
Wildfly | 10.1.Final |
---|---|
RestEasy | 3.1.4.Final |
keycloak-wildfly-adapter | 3.2.0.Final |
クライアントアプリケーションは、Keycloakから発行されたアクセストークンを使ってAPIサーバにアクセスし、取得したデータを利用してユーザーにWebページを表示します。今回はSpring Frameworkとkeycloak-spring-security-adapterを利用し、以下の構成で作成しました。
ライブラリ | バージョン |
---|---|
spring-boot | 1.5.7.RELEASE |
spring-boot-starter-security | 1.5.7.RELEASE |
keycloak-spring-security-adapter | 3.2.0.Final |
最初にKeycloakの設定を行います。KeycloakにはAPIサーバとクライアントアプリケーションの登録と、ログインするユーザーとその権限を設定していきます。
なお、これらの設定項目をエクスポートしたファイルをGitHubのリポジトリ(https://github.com/Hitachi/Keycloak-adapter-examples)に置いてあるので、そのファイルをインポートすることで設定を完了できます。
次に「Realm(レルム)」を作成し、この中にユーザーやクライアントの情報を追加していきます。RealmはKeycloak上に複数の設定方法を持つためのもので、クライアント設定やユーザー情報などが格納されます。今回は「sample」という名前のRealmを作成しました(画面1)。
Keycloakでは、管理するアプリケーションを「クライアント」という形で登録します。今回は、APIサーバとクライアントアプリケーションをクライアントとして登録します。
各クライアントは、Keycloakの「Clients」画面から登録します。今回の登録内容は、以下のようになります(画面2、画面3)。
項目 | 設定値 |
---|---|
Client ID | api-service |
Client Protocol | openid-connect |
Access Type | bearer-only |
項目 | 設定値 |
---|---|
Client ID | client-app |
Client Protocol | openid-connect |
Access Type | confidential |
Standard Flow Enabled | ON |
Valid Redirect URIs | http://localhost:9000/* |
次に「ロール」を作成します。ロールの情報はKeycloakのユーザーにマッピングし、クライアントでアクセス制御を行う際に利用します。今回は「user」「admin」という2つのロールを追加します。Keycloakの「Roles」画面で「Add Role」をクリックして、ロールを追加します(画面4)。
次にKeycloakへのユーザーを追加します。今回は「user01」「admin」という2つのユーザーを追加します。user01はユーザーページおよびAPIの実行が可能で、adminはそれに加えて管理者専用ページへのアクセスと管理者専用APIの実行が可能なユーザーとします。Keycloakの「Users」画面から「Add user」をクリックして、ユーザーを追加します(画面5)。
ユーザー名を入力したら、各ユーザーにパスワードを設定するため「Credentials」タブを開き、パスワードを設定します(画面6)。
最後に「Role Mappings」タブを開いてユーザーとロールのマッピングを行い、ユーザーにロールを割り当てます(画面7)。adminユーザーにはuserロールとadminロールを、user01ユーザーにはuserロールだけを割り当てます。
なお、画面7内に見えている「offline_access」と「uma_authorization」はKeycloakに最初から設定されている特殊なロールです。今回は利用しないので外しておきます。
以上の操作でKeycloakの設定が完了しました。引き続き、APIサーバとクライアントアプリケーションを構築していきます。
Copyright © ITmedia, Inc. All Rights Reserved.