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」を参照してください。
 なぜ「シングルサインオン」が必要なのか?
なぜ「シングルサインオン」が必要なのか? 第1回 もはや企業のID管理で避けては通れない「IDaaS」とは?
第1回 もはや企業のID管理で避けては通れない「IDaaS」とは? 強力なSSOを実現するXML認証・認可サービス(SAML)
強力なSSOを実現するXML認証・認可サービス(SAML) OpenIG、OpenDJと連携したOpenAMの新機能
OpenIG、OpenDJと連携したOpenAMの新機能Copyright © ITmedia, Inc. All Rights Reserved.