連載
» 2017年11月08日 05時00分 公開

Keycloak超入門(3):Keycloakクライアントアダプターを利用してAPIサービスを構築してみよう (1/4)

本連載では、近年注目されている認可プロトコル「OpenID Connect」をサポートするオープンソースのシングルサインオン(SSO)ソフトウェア「Keycloak」の活用方法を解説していきます。今回は、Keycloakクライアントアダプターを利用して、APIサービスを構築してみます。

[茂木昂士,株式会社日立製作所]
「Keycloak超入門」のインデックス

連載目次

 連載第3回目となる今回は「Keycloak」が提供するクライアントアダプターを利用して、OpenID Connectに対応したAPIサーバとクライアントアプリケーションを構築します。Keycloakクライアントアダプターを利用すると、Keycloakと連携できるようになり、簡単にシングルサインオン(SSO)や公開APIサービスを実現することができます。

Keycloakクライアントアダプターについて

 「クライアントアダプター」はKeycloakが提供するライブラリで、Keycloakからのアクセストークン取得やアクセス制御を行います(図1)。「Wildfly」や「Jetty」といったアプリケーションサーバ向けのアダプターや、「Spring Framework」などのフレームワーク向けのアダプターが提供されています。

図1 図1 クライアントアダプターはKeycloakからのアクセストークン取得やアクセス制御を行う

 今回は、WildflyアダプターとSpring Framework用アダプターを利用します。それ以外のアダプターを利用する場合は、Keycloakの公式ドキュメント「Securing Applications and Services」を参照してください。

構築するアプリケーションの構成

 今回構築するアプリケーションは、以下の図2のようになっています。なお、これらのサンプルはGitHubのリポジトリ(https://github.com/Hitachi/Keycloak-adapter-examples)で公開しているので、ぜひ活用してください。

図2 図2 クライアントアダプターを利用して構築するアプリケーションの構成

APIサーバ

 APIサーバはユーザー向けと管理者向けのAPIエンドポイントを持ち、KeycloakのWildflyアダプターでアクセス制御が行われています。今回は以下の構成で作成しました。

●APIサーバの構成
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の設定を行います。KeycloakにはAPIサーバとクライアントアプリケーションの登録と、ログインするユーザーとその権限を設定していきます。

 なお、これらの設定項目をエクスポートしたファイルをGitHubのリポジトリ(https://github.com/Hitachi/Keycloak-adapter-examples)に置いてあるので、そのファイルをインポートすることで設定を完了できます。

Realm(レルム)の作成

 次に「Realm(レルム)」を作成し、この中にユーザーやクライアントの情報を追加していきます。RealmはKeycloak上に複数の設定方法を持つためのもので、クライアント設定やユーザー情報などが格納されます。今回は「sample」という名前のRealmを作成しました(画面1)。

画面1 画面1 クライアント設定やユーザー情報などが格納される「Realm(レルム)」を作成する

クライアントの登録

 Keycloakでは、管理するアプリケーションを「クライアント」という形で登録します。今回は、APIサーバとクライアントアプリケーションをクライアントとして登録します。

 各クライアントは、Keycloakの「Clients」画面から登録します。今回の登録内容は、以下のようになります(画面2画面3)。

●APIサーバの設定
項目 設定値
Client ID api-service
Client Protocol openid-connect
Access Type bearer-only
画面2 画面2 Keycloakの「Clients」画面でAPIサーバを登録する
●クライアントアプリケーションの設定
項目 設定値
Client ID client-app
Client Protocol openid-connect
Access Type confidential
Standard Flow Enabled ON
Valid Redirect URIs http://localhost:9000/*
画面3 画面3 Keycloakの「Clients」画面でクライアントアプリケーションを登録する

ロールの作成

 次に「ロール」を作成します。ロールの情報はKeycloakのユーザーにマッピングし、クライアントでアクセス制御を行う際に利用します。今回は「user」「admin」という2つのロールを追加します。Keycloakの「Roles」画面で「Add Role」をクリックして、ロールを追加します(画面4)。

画面4 画面4 Keycloakの「Roles」画面でロールを追加する

ユーザーの作成

 次にKeycloakへのユーザーを追加します。今回は「user01」「admin」という2つのユーザーを追加します。user01はユーザーページおよびAPIの実行が可能で、adminはそれに加えて管理者専用ページへのアクセスと管理者専用APIの実行が可能なユーザーとします。Keycloakの「Users」画面から「Add user」をクリックして、ユーザーを追加します(画面5)。

画面5 画面5 Keycloakの「Users」画面からユーザーを追加する

 ユーザー名を入力したら、各ユーザーにパスワードを設定するため「Credentials」タブを開き、パスワードを設定します(画面6)。

画面6 画面6 「Credentials」タブで各ユーザーにパスワードを設定する

 最後に「Role Mappings」タブを開いてユーザーとロールのマッピングを行い、ユーザーにロールを割り当てます(画面7)。adminユーザーにはuserロールとadminロールを、user01ユーザーにはuserロールだけを割り当てます。

画面7 画面7 「Role Mappings」タブでユーザーとロールをマッピングする

 なお、画面7内に見えている「offline_access」と「uma_authorization」はKeycloakに最初から設定されている特殊なロールです。今回は利用しないので外しておきます。

 以上の操作でKeycloakの設定が完了しました。引き続き、APIサーバとクライアントアプリケーションを構築していきます。

       1|2|3|4 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。