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

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

[茂木昂士,株式会社日立製作所]

APIサーバの構築

 APIサーバは、Wildfly上で動作するアプリケーションとして構築します。KeycloakのWildflyアダプターを利用すると、対象アプリケーションに設定ファイルを配置するだけでKeycloakと連携できるようになり、OpenID Connectによるアクセス制御が実現できます。

 ここではWildflyアダプターのインストール方法、アダプターの設定方法、Keycloakによるアクセス制御の設定方法を説明していきます。

Wildflyアダプターのインストール

 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アダプターの設定には「keycloak.json」というファイルを、「WEB-INF」ディレクトリ以下に配置する必要があります。このファイルにはKeycloakサーバに関する情報や、Keycloakからトークンを発行するために必要な情報などが記載されています。

 Keycloakの管理コンソールから「keycloak.json」をダウンロードして、「WEB-INF」ディレクトリに配置します。Keycloakのクライアント画面から「Installation」タブをクリックし、「Format Option」を「Keycloak OIDC JSON」に設定すると、必要な設定項目が記載されたjsonファイルが表示されます(画面8)。

画面8 画面8 クライアント画面で「keycloak.json」ファイルを表示

 「keycloak.json」ファイルの内容は、以下のようになっています。

{
  "realm": "sample",
  "bearer-only": true,
  "auth-server-url": "http://localhost:8080/auth",
  "ssl-required": "external",
  "resource": "api-service"
}

 今回は必要最低限の設定になりますが、他にもKeycloakとアプリケーションが連携するための多くの設定項目があります。詳細については公式ドキュメントの「Java Adapter Config」を参照してください。

APIサーバアプリケーションの設定

 アプリケーションのアクセス制御は「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.

RSSについて

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

メールマガジン登録

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