第3章 Spring Boot での Red Hat Single Sign-On の使用

Red Hat Single Sign-On クライアントアダプターは、Red Hat Single Sign-On でアプリケーションとサービスのセキュリティーを簡単に保護するためのライブラリーです。Keycloak Spring Boot アダプターを使用して、Spring Boot プロジェクトをセキュアにすることができます。

3.1. Spring Boot コンテナーでの Red Hat Single Sign-On の使用

Spring Boot アプリケーションをセキュアにするには、Keycloak Spring Boot アダプター JAR をプロジェクトに追加します。Keycloak Spring Boot アダプターは Spring Boot の自動設定機能を活用するため、Keycloak Spring Boot スターターをプロジェクトに追加することのみが必要になります。

手順

  1. Keycloak Spring Boot スターターを手動で追加するには、以下をプロジェクトの pom.xml に追加します。

    <dependency>
            <groupId>org.keycloak</groupId>
            <artifactId>keycloak-spring-boot-starter</artifactId>
    </dependency>
  2. アダプター BOM 依存関係を追加します。

    <dependencyManagement>
      <dependencies>
            <dependency>
              <groupId>org.keycloak.bom</groupId>
              <artifactId>keycloak-adapter-bom</artifactId>
              <version>3.4.17.Final-redhat-00001</version>
              <type>pom</type>
              <scope>import</scope>
            </dependency>
      </dependencies>
    </dependencyManagement>
  3. Keycloak を使用するように Spring Boot プロジェクトを設定します。keycloak.json ファイルの代わりに、通常の Spring Boot 設定を使用して Spring Boot アダプターのレルムを設定できます。たとえば、以下の設定を src/main/resources/application.properties ファイルに追加します。

    keycloak.realm = demorealm
    keycloak.auth-server-url = http://127.0.0.1:8080/auth
    keycloak.ssl-required = external
    keycloak.resource = demoapp
    keycloak.credentials.secret = 11111111-1111-1111-1111-111111111111
    keycloak.use-resource-role-mappings = true

    keycloak.enabled = false を設定して、Keycloak Spring Boot Adapter (テストなど) を無効できます。Policy Enforcer を設定するには、keycloak.json とは異なり、policy-enforcer ではなく policy-enforcer-config を使用する必要があります。

  4. web.xml に Java EE セキュリティー設定を指定します。Spring Boot Adapter は login-method を KEYCLOAK に設定し、起動時に security-constraints を設定します。設定例を以下に示します。

    keycloak.securityConstraints[0].authRoles[0] = admin
    keycloak.securityConstraints[0].authRoles[1] = user
    keycloak.securityConstraints[0].securityCollections[0].name = insecure stuff
    keycloak.securityConstraints[0].securityCollections[0].patterns[0] = /insecure
    
    
    keycloak.securityConstraints[1].authRoles[0] = admin
    keycloak.securityConstraints[1].securityCollections[0].name = admin stuff
    keycloak.securityConstraints[1].securityCollections[0].patterns[0] = /admin

    注記: Spring アプリケーションを WAR としてデプロイする場合は、Spring Boot アダプターを使用しないでください。使用しているアプリケーションサーバーまたはサーブレットコンテナーの専用アダプターを使用します。Spring Boot には web.xml ファイルも含まれている必要があります。