APIサーバは、Wildfly上で動作するアプリケーションとして構築します。KeycloakのWildflyアダプターを利用すると、対象アプリケーションに設定ファイルを配置するだけでKeycloakと連携できるようになり、OpenID Connectによるアクセス制御が実現できます。
ここではWildflyアダプターのインストール方法、アダプターの設定方法、Keycloakによるアクセス制御の設定方法を説明していきます。
Wildflyアダプターのインストールは、本連載第2回でKeycloakにインストールした方法と同様です。
Wildflyアダプターは、Keycloakのダウンロードサイトからダウンロードします。今回は「keycloak-wildfly-adapter-dist-3.2.0.Final.zip」(Wildfly 9/10向けのクライアントアダプター)を使用します。ダウンロードしたファイルは、Keycloakのディレクトリで解凍します。
# <wildfly.home>は適宜変更してください。 $ cp keycloak-wildfly-adapter-dist-3.2.0.Final.zip <wildfly.home> $ cd <wildfly.home> $ unzip keycloak-wildfly-adapter-dist-3.2.0.Final.zip
ファイルを解凍後は以下のコマンドを実行して、WildflyサーバにKeycloakクライアントアダプターをインストールします。
$ ./bin/jboss-cli.sh --file=bin/adapter-install-offline.cli
Keycloakアダプターの設定には「keycloak.json」というファイルを、「WEB-INF」ディレクトリ以下に配置する必要があります。このファイルにはKeycloakサーバに関する情報や、Keycloakからトークンを発行するために必要な情報などが記載されています。
Keycloakの管理コンソールから「keycloak.json」をダウンロードして、「WEB-INF」ディレクトリに配置します。Keycloakのクライアント画面から「Installation」タブをクリックし、「Format Option」を「Keycloak OIDC JSON」に設定すると、必要な設定項目が記載されたjsonファイルが表示されます(画面8)。
「keycloak.json」ファイルの内容は、以下のようになっています。
{ "realm": "sample", "bearer-only": true, "auth-server-url": "http://localhost:8080/auth", "ssl-required": "external", "resource": "api-service" }
今回は必要最低限の設定になりますが、他にもKeycloakとアプリケーションが連携するための多くの設定項目があります。詳細については公式ドキュメントの「Java Adapter Config」を参照してください。
アプリケーションのアクセス制御は「web.xml」ファイルに記述します。
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <module-name>service</module-name> <security-constraint> <web-resource-collection> <web-resource-name>user resource</web-resource-name> <url-pattern>/user/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>user</role-name> </auth-constraint> </security-constraint> <security-constraint> <web-resource-collection> <web-resource-name>admin resource</web-resource-name> <url-pattern>/admin/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>admin</role-name> </auth-constraint> </security-constraint> <login-config> <auth-method>KEYCLOAK</auth-method> <realm-name>sample</realm-name> </login-config> <security-role> <role-name>user</role-name> </security-role> <security-role> <role-name>admin</role-name> </security-role> </web-app>
上記の設定では「/users/」以降のリソースにはuserまたはadminロールを持つユーザーが、「/admin/」以降のリソースにはadminロールを持つユーザーだけがアクセスできるようになります。
今回はシンプルな設定にしましたが、より高度な設定が必要な場合はKeycloakの公式ドキュメントの「JBoss EAP/Wildfly Adapter」を参照してください。
Copyright © ITmedia, Inc. All Rights Reserved.