The English version of quarkus.io is the official project site. Translated sites are community supported on a best-effort basis.

OpenID Connect(OIDC)とKeycloakを使った認可の中央管理

このガイドでは、Keycloak 認可サービス を使用して、Quarkusアプリケーションが 保護されたリソースへのベアラートークンアクセスを認可する方法を説明します。

quarkus-keycloak-authorization エクステンションは、 quarkus-oidc に基づいており、Keycloakによって管理される権限に基づいて保護されたリソースへのアクセスを強制するポリシーエンフォーサーを提供しており、現在はQuarkus OIDCサービスアプリケーションでのみ使用することができます。Keycloakは、リソースベースアクセスコントロールに基づいた、柔軟で動的な認可機能を提供します。つまり、特定のアクセス制御メカニズム(RBACなど)に基づいて明示的にアクセスを強制するのではなく、リソースの名前、識別子、またはURIに基づいて、リクエストがリソースへのアクセスを許可されているかどうかをチェックするだけで済むようになります。

アプリケーションから認可を外部化することで、異なるアクセス制御メカニズムを使用してアプリケーションを保護することができ、セキュリティー要件が変更されるたびにアプリケーションを再デプロイする必要がなくなります。Keycloakは、保護されたリソースおよび関連する権限が管理される一元化された認可サービスとして機能します。

Bearer Token 認証メカニズムの詳細については、ガイド OpenID Connectを利用したサービスアプリケーションの保護 を参照してください。認証を行い、セキュリティアイデンティティを作成するのは、 Bearer Token 認証メカニズムであり、一方、 quarkus-keycloak-authorization エクステンションは、現在のリクエストパスやその他のポリシー設定に基づいて、このアイデンティティにKeycloak Authorization Policyを適用する責任があることを認識することが重要です。

すでにKeycloakに慣れ親しんでいる方は、このエクステンションは基本的にはQuarkusアプリケーションに特化したアダプターの別実装であること気づかれるでしょう。Keycloakに詳しくない場合は、Keycloakの ドキュメント を参照してください。

前提条件

このガイドを完成させるには、以下が必要です:

  • 約15分

  • IDE

  • JDK 11+ がインストールされ、 JAVA_HOME が適切に設定されていること

  • Apache Maven 3.8.6

  • 動作するコンテナランタイム(Docker, Podman)

  • 使用したい場合は、 Quarkus CLI

  • ネイティブ実行可能ファイルをビルドしたい場合、MandrelまたはGraalVM(あるいはネイティブなコンテナビルドを使用する場合はDocker)をインストールし、 適切に設定していること

  • jq tool

  • Keycloak

アーキテクチャ

この例では、2つのエンドポイントを提供する非常にシンプルなマイクロサービスを構築しています。

  • /api/users/me

  • /api/admin

これらのエンドポイントは保護されており、クライアントがリクエストと一緒にベアラートークンを送信している場合にのみアクセスすることができます。

ベアラートークンは、Keycloakサーバーによって発行され、トークンが発行された対象を表します。OAuth 2.0 認可サーバーであるため、トークンはユーザーの代わりに動作するクライアントも参照します。

/api/users/me エンドポイントは、有効なトークンを持つ任意のユーザーがアクセスできます。応答として、ユーザーに関する詳細が記載された JSON ドキュメントを返却します。このエンドポイントは RBAC (Role-Based Access Control) で保護されており、 user のロールで許可されたユーザーのみがこのエンドポイントにアクセスできます。

/api/admin エンドポイントは RBAC (役割ベースのアクセス制御) で保護されており、 admin の役割を付与されたユーザーのみがアクセスできます。

これは、RBACポリシーを使用してリソースへのアクセスを制御する非常にシンプルな例です。しかし、Keycloakは他のタイプのポリシーをサポートしており、より詳細なアクセス制御を行うために使用することができます。この例を使用すると、アプリケーションが認可ポリシーから完全に切り離されており、エンフォースメントは純粋にアクセスされたリソースに基づいていることがわかるでしょう。

ソリューション

次のセクションで紹介する手順に沿って、ステップを踏んでアプリを作成することをお勧めします。ただし、完成した例にそのまま進んでも構いません。

Gitレポジトリをクローンするか git clone https://github.com/quarkusio/quarkus-quickstarts.gitアーカイブ をダウンロードします。

ソリューションは security-keycloak-authorization-quickstart ディレクトリ にあります。

プロジェクトの作成

まず、新しいプロジェクトが必要です。以下のコマンドで新規プロジェクトを作成します。

コマンドラインインタフェース
quarkus create app org.acme:security-keycloak-authorization-quickstart \
    --extension='oidc,keycloak-authorization,resteasy-reactive-jackson' \
    --no-code
cd security-keycloak-authorization-quickstart

Gradleプロジェクトを作成するには、 --gradle または --gradle-kotlin-dsl オプションを追加します。

Quarkus CLIのインストール方法や使用方法については、<a href="cli-tooling.html">Quarkus CLIガイド</a> を参照してください。

Maven
mvn io.quarkus.platform:quarkus-maven-plugin:2.14.2.Final:create \
    -DprojectGroupId=org.acme \
    -DprojectArtifactId=security-keycloak-authorization-quickstart \
    -Dextensions='oidc,keycloak-authorization,resteasy-reactive-jackson' \
    -DnoCode
cd security-keycloak-authorization-quickstart

Gradleプロジェクトを作成するには、 -DbuildTool=gradle または -DbuildTool=gradle-kotlin-dsl オプションを追加します。

このコマンドはプロジェクトを生成し、keycloak-authorization エクステンションをインポートします。これはQuarkusアプリケーション用のKeycloakアダプターの実装で、Keycloakサーバーと統合してベアラートークンの認可を実行するのに必要なすべての機能を提供します。

すでにQuarkusプロジェクトが設定されている場合は、プロジェクトのベースディレクトリーで次のコマンドを実行することで、 oidckeycloak-authorization のエクステンションをプロジェクトに追加できます。

コマンドラインインタフェース
quarkus extension add 'oidc,keycloak-authorization'
Maven
./mvnw quarkus:add-extension -Dextensions='oidc,keycloak-authorization'
Gradle
./gradlew addExtension --extensions='oidc,keycloak-authorization'

これにより、ビルドファイルに以下が追加されます:

pom.xml
<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-oidc</artifactId>
</dependency>
<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-keycloak-authorization</artifactId>
</dependency>
build.gradle
implementation("io.quarkus:quarkus-oidc")
implementation("io.quarkus:quarkus-keycloak-authorization")

まずは /api/users/me エンドポイントを実装してみましょう。下のソースコードを見るとわかるように、これは通常の JAX-RS リソースです。

package org.acme.security.keycloak.authorization;

import javax.inject.Inject;
import javax.ws.rs.GET;
import javax.ws.rs.Path;

import org.jboss.resteasy.annotations.cache.NoCache;

import io.quarkus.security.identity.SecurityIdentity;

@Path("/api/users")
public class UsersResource {

    @Inject
    SecurityIdentity identity;

    @GET
    @Path("/me")
    @NoCache
    public User me() {
        return new User(identity);
    }

    public static class User {

        private final String userName;

        User(SecurityIdentity identity) {
            this.userName = identity.getPrincipal().getName();
        }

        public String getUserName() {
            return userName;
        }
    }
}

/api/admin エンドポイントのソースコードも非常にシンプルです。

package org.acme.security.keycloak.authorization;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import io.quarkus.security.Authenticated;

@Path("/api/admin")
@Authenticated
public class AdminResource {

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String admin() {
        return "granted";
    }
}

リソースへのアクセスを明示的に強制するために、 @RolesAllowed のようなアノテーションを定義していないことに注意してください。エクステンションは、Keycloakにある保護されたリソースのURIをマッピングし、それに応じて許可を評価し、Keycloakによって付与される許可に応じてアクセスを許可または拒否する責任を負います。

アプリケーションの設定

OpenID Connect エクステンションを使用すると、src/main/resources ディレクトリーに配置される application.properties ファイルを使用してアダプター設定を定義することができます。

# OIDC Configuration
%prod.quarkus.oidc.auth-server-url=https://localhost:8543/realms/quarkus
quarkus.oidc.client-id=backend-service
quarkus.oidc.credentials.secret=secret
quarkus.oidc.tls.verification=none

# Enable Policy Enforcement
quarkus.keycloak.policy-enforcer.enable=true

# Tell Dev Services for Keycloak to import the realm file
# This property is not effective when running the application in JVM or Native modes
quarkus.keycloak.devservices.realm-path=quarkus-realm.json
quarkus.oidc.auth-server-url%prod. プロファイルのプレフィックスを追加すると、アプリケーションが開発モードで実行されたときに Dev Services for Keycloak がコンテナを起動するようになります。詳しくは、後述の 開発モードでのアプリケーションの実行 をご覧ください。
デフォルトでは、 quarkus-oidc エクステンションを使用するアプリケーションは、 service タイプのアプリケーションとしてマークされます( quarkus.oidc.application-type 参照)。また、このエクステンションは、 web-app タイプのアプリケーションのみをサポートしますが、認可コード付与応答の一部として返されたアクセストークンが、ロールのソースとしてマークされている場合に限ります: quarkus.oidc.roles.source=accesstoken ( web-app タイプのアプリケーションは、デフォルトでIDトークンのロールをチェックします)。

Keycloakサーバーの起動と設定

アプリケーションを開発モードで実行するときは、Keycloakサーバーを起動しないでください - Dev Services for Keycloak がコンテナを起動します。詳細については、下記の 開発モードでのアプリケーションの実行 セクションを参照してください。

Keycloak Serverを起動するにはDockerを使用し、以下のコマンドを実行するだけです。

docker run --name keycloak -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin -p 8543:8443 -v "$(pwd)"/config/keycloak-keystore.jks:/etc/keycloak-keystore.jks quay.io/keycloak/keycloak:{keycloak.version} start  --hostname-strict=false --https-key-store-file=/etc/keycloak-keystore.jks

ここで、 keycloak.version は、 17.0.0 以降に設定する必要があります。

Keycloakサーバーには、 localhost:8543/auth でアクセスできるはずです。

Keycloak 管理 Consoleにアクセスするには、 admin ユーザーとしてログインしてください。ユーザー名は admin 、パスワードは admin です。

realm設定ファイルをインポートして、新しいrealmを作成します。詳細については、 新しいレルムを作成する 方法についてのKeycloakのドキュメントを参照してください。

レルムをインポートすると、リソースのパーミッションが表示されます。

Keycloak

これは、エンドポイントに @RolesAllowed のアノテーションがない理由を説明しています。リソースのアクセス許可は、Keycloakで直接設定されます。

開発モードでのアプリケーションの実行

アプリケーションを開発モードで実行するには、次を使用します:

コマンドラインインタフェース
quarkus dev
Maven
./mvnw quarkus:dev
Gradle
./gradlew --console=plain quarkusDev

Dev Services for Keycloak は、Keycloakコンテナを起動し、 quarkus-realm.json をインポートします。

/q/dev にある Dev UI を開き、 OpenID Connect Dev UI カードの Provider: Keycloak リンクをクリックします。

OpenID Connect Dev UI が提供する Single Page Application へのログインを求められます。

  • /api/users/me リソースへのアクセス User Permission のみを持つ alice (パスワード: alice) としてログインします。

    • /api/admin にアクセスすると、403 が返されます

    • /api/users/me にアクセスすると、200 が返されます

  • /api/admin リソースにアクセスするための Admin Permission/api/users/me リソースにアクセスするための User Permission の両方を持っている admin (パスワード: admin)としてログアウトし、ログインします。

    • /api/admin にアクセスすると、200 が返されます

    • /api/users/me にアクセスすると、200 が返されます

JVMモードでの実行

dev モードで試し終わったら、標準的なJavaアプリケーションとして実行することができます。

まずコンパイルします。

コマンドラインインタフェース
quarkus build
Maven
./mvnw install
Gradle
./gradlew build

そして、以下のように実行します。

java -jar target/quarkus-app/quarkus-run.jar

ネイティブモードでのアプリケーションの実行

同じデモをネイティブコードにコンパイルすることができます。

これは、生成されたバイナリーにランタイム技術が含まれており、最小限のリソースオーバーヘッドで実行できるように最適化されているため、本番環境にJVMをインストールする必要がないことを意味します。

コンパイルには少し時間がかかるので、このステップはデフォルトで無効になっています。 native プロファイルを有効にして再度ビルドしてみましょう。

コマンドラインインタフェース
quarkus build --native
Maven
./mvnw install -Dnative
Gradle
./gradlew build -Dquarkus.package.type=native

コーヒーを飲んでから、このバイナリーを直接実行してみましょう。

./target/security-keycloak-authorization-quickstart-runner

アプリケーションのテスト

開発モードでのアプリケーションのテストについては、上記の 開発モードでのアプリケーションの実行 セクションを参照してください。

curl でJVMまたはNativeモードで起動したアプリケーションのテストが可能です。

アプリケーションはベアラートークン認可を使用しており、まず最初に行うべきことは、アプリケーションのリソースにアクセスするためにKeycloak Serverからアクセストークンを取得することです。

export access_token=$(\
    curl --insecure -X POST https://localhost:8543/realms/quarkus/protocol/openid-connect/token \
    --user backend-service:secret \
    -H 'content-type: application/x-www-form-urlencoded' \
    -d 'username=alice&password=alice&grant_type=password' | jq --raw-output '.access_token' \
 )

上記の例では、ユーザー alice のアクセストークンを取得しています。

どのユーザーでも http://localhost:8080/api/users/me エンドポイントで、ユーザーに関する詳細情報を含む JSON ペイロードを取得することが出来ます。

curl -v -X GET \
  http://localhost:8080/api/users/me \
  -H "Authorization: Bearer "$access_token

http://localhost:8080/api/admin エンドポイントは、 admin ロールを持つユーザーのみがアクセスできます。先程発行されたアクセストークンを使用してこのエンドポイントにアクセスしようとすると、サーバーから 403 応答が返ってくるはずです。

 curl -v -X GET \
   http://localhost:8080/api/admin \
   -H "Authorization: Bearer "$access_token

admin エンドポイントにアクセスするには、 admin ユーザーのトークンを取得する必要があります。

export access_token=$(\
    curl --insecure -X POST https://localhost:8543/realms/quarkus/protocol/openid-connect/token \
    --user backend-service:secret \
    -H 'content-type: application/x-www-form-urlencoded' \
    -d 'username=admin&password=admin&grant_type=password' | jq --raw-output '.access_token' \
 )

プログラムで権限をチェックする

場合によっては、保護されたリソースにアクセスするためのリクエストが許可されているかどうかを プログラムでチェックしたいこともあるでしょう。Beanに SecurityIdentity インスタンスを注入することで、以下のようにパーミッションをチェックすることができます。

import io.quarkus.security.identity.SecurityIdentity;
import io.smallrye.mutiny.Uni;

@Path("/api/protected")
public class ProtectedResource {

    @Inject
    SecurityIdentity identity;


    @GET
    public Uni<List<Permission>> get() {
        return identity.checkPermission(new AuthPermission("{resource_name}")).onItem()
                .transform(granted -> {
                    if (granted) {
                        return identity.getAttribute("permissions");
                    }
                    throw new ForbiddenException();
                });
    }
}

認可クライアントのインジェクション

場合によっては、 Keycloak Authorization Client Java APIを使用して、Keycloakから直接リソースの管理や権限の取得などの特定の操作を行いたいこともあるでしょう。そのためには、以下のように AuthzClient インスタンスをBeanに注入します。

public class ProtectedResource {
    @Inject
    AuthzClient authzClient;
}

Note: AuthzClient を直接使用する場合は、必ず quarkus.keycloak.policy-enforcer.enable=true を設定してください。そうしないと、インジェクションに使用できる Bean がありません。

保護されたリソースのマッピング

デフォルトでは、エクステンションは Keycloak からオンデマンドでリソースを取得します。 URI は、保護されるべきアプリケーション内のリソースをマップするために使用されます。

この動作を無効にして、起動時にリソースをフェッチしたい場合は、以下の設定を使用します。

quarkus.keycloak.policy-enforcer.lazy-load-paths=false

Keycloakにあるリソースの数によっては、それらを取得するのにかかる時間がアプリケーションの起動時間に影響することに注意してください。

保護されたリソースの設定についての詳細

デフォルトの構成では、Keycloakはロールを管理し、誰がどのルートにアクセスできるかを決定します。

@RolesAllowed アノテーションまたは application.properties ファイルを使用して保護されたルートを設定するには、ガイド OpenID Connect Adapter を利用してJAX-RSアプリケーションを保護 および Securityの認可 を参照してください。詳細については、 Securityのガイドを確認してください。

パブリックリソースへのアクセス

quarkus-keycloak-authorization のポリシーを適用せずにパブリックリソースにアクセスしたい場合は、 Security Authorization ガイドで説明されているように、 application.propertiespermit HTTP Policy の設定を作成する必要があります。

以下のようなKeycloak Authorization Policyを使ったポリシーチェックを無効にします。

quarkus.keycloak.policy-enforcer.paths.1.path=/api/public
quarkus.keycloak.policy-enforcer.paths.1.enforcement-mode=DISABLED

これはもう必要ありません。

匿名ユーザのパブリックリソースへのアクセスをブロックしたい場合は、強制力のあるKeycloak Authorization Policyを作成します。

quarkus.keycloak.policy-enforcer.paths.1.path=/api/public-enforcing
quarkus.keycloak.policy-enforcer.paths.1.enforcement-mode=ENFORCING

なお、パブリックリソースへの匿名のアクセスを制御する必要がある場合は、デフォルトのテナント設定のみが適用されます。

マルチテナンシー

マルチテナントOpenID Connectサービスアプリケーション の場合と同様に、各テナントごとに複数のポリシーエンフォースメント構成を設定することができます。

例えば、以下のようになります。

quarkus.keycloak.policy-enforcer.enable=true

# Default Tenant
quarkus.oidc.auth-server-url=${keycloak.url}/realms/quarkus
quarkus.oidc.client-id=quarkus-app
quarkus.oidc.credentials.secret=secret

quarkus.keycloak.policy-enforcer.enforcement-mode=PERMISSIVE
quarkus.keycloak.policy-enforcer.paths.1.name=Permission Resource
quarkus.keycloak.policy-enforcer.paths.1.path=/api/permission
quarkus.keycloak.policy-enforcer.paths.1.claim-information-point.claims.static-claim=static-claim

# Service Tenant

quarkus.oidc.service-tenant.auth-server-url=${keycloak.url}/realms/quarkus
quarkus.oidc.service-tenant.client-id=quarkus-app
quarkus.oidc.service-tenant.credentials.secret=secret

quarkus.keycloak.service-tenant.policy-enforcer.enforcement-mode=PERMISSIVE
quarkus.keycloak.service-tenant.policy-enforcer.paths.1.name=Permission Resource Service
quarkus.keycloak.service-tenant.policy-enforcer.paths.1.path=/api/permission
quarkus.keycloak.service-tenant.policy-enforcer.paths.1.claim-information-point.claims.static-claim=static-claim


# WebApp Tenant

quarkus.oidc.webapp-tenant.auth-server-url=${keycloak.url}/realms/quarkus
quarkus.oidc.webapp-tenant.client-id=quarkus-app
quarkus.oidc.webapp-tenant.credentials.secret=secret
quarkus.oidc.webapp-tenant.application-type=web-app
quarkus.oidc.webapp-tenant.roles.source=accesstoken

quarkus.keycloak.webapp-tenant.policy-enforcer.enforcement-mode=PERMISSIVE
quarkus.keycloak.webapp-tenant.policy-enforcer.paths.1.name=Permission Resource WebApp
quarkus.keycloak.webapp-tenant.policy-enforcer.paths.1.path=/api/permission
quarkus.keycloak.webapp-tenant.policy-enforcer.paths.1.claim-information-point.claims.static-claim=static-claim

設定リファレンス

この設定は、 Keycloak Policy Enforcer の公式設定に基づいています。異なる設定オプションについての詳細をお探しの方は、こちらのドキュメントをご覧ください。

ビルド時に固定される設定プロパティ - その他の設定プロパティはランタイムでオーバーライド可能です。

Configuration property

デフォルト

Adapters will make separate HTTP invocations to the Keycloak server to turn an access code into an access token. This config option defines how many connections to the Keycloak server should be pooled

Environment variable: QUARKUS_KEYCLOAK_CONNECTION_POOL_SIZE

int

20

Specifies how policies are enforced.

Environment variable: QUARKUS_KEYCLOAK_POLICY_ENFORCER_ENFORCEMENT_MODE

permissive, enforcing, disabled

enforcing

Defines the limit of entries that should be kept in the cache

Environment variable: QUARKUS_KEYCLOAK_POLICY_ENFORCER_PATH_CACHE_MAX_ENTRIES

int

1000

Defines the time in milliseconds when the entry should be expired

Environment variable: QUARKUS_KEYCLOAK_POLICY_ENFORCER_PATH_CACHE_LIFESPAN

30000

Specifies how the adapter should fetch the server for resources associated with paths in your application. If true, the policy enforcer is going to fetch resources on-demand accordingly with the path being requested

Environment variable: QUARKUS_KEYCLOAK_POLICY_ENFORCER_LAZY_LOAD_PATHS

boolean

true

Specifies how scopes should be mapped to HTTP methods. If set to true, the policy enforcer will use the HTTP method from the current request to check whether access should be granted

Environment variable: QUARKUS_KEYCLOAK_POLICY_ENFORCER_HTTP_METHOD_AS_SCOPE

boolean

false

The name of a resource on the server that is to be associated with a given path

Environment variable: QUARKUS_KEYCLOAK_POLICY_ENFORCER_PATHS__PATHS__NAME

string

A URI relative to the application’s context path that should be protected by the policy enforcer

Environment variable: QUARKUS_KEYCLOAK_POLICY_ENFORCER_PATHS__PATHS__PATH

string

The name of the HTTP method

Environment variable: QUARKUS_KEYCLOAK_POLICY_ENFORCER_PATHS__PATHS__METHODS__METHODS__METHOD

string

required

An array of strings with the scopes associated with the method

Environment variable: QUARKUS_KEYCLOAK_POLICY_ENFORCER_PATHS__PATHS__METHODS__METHODS__SCOPES

list of string

required

A string referencing the enforcement mode for the scopes associated with a method

Environment variable: QUARKUS_KEYCLOAK_POLICY_ENFORCER_PATHS__PATHS__METHODS__METHODS__SCOPES_ENFORCEMENT_MODE

all, any, disabled

all

Specifies how policies are enforced

Environment variable: QUARKUS_KEYCLOAK_POLICY_ENFORCER_PATHS__PATHS__ENFORCEMENT_MODE

permissive, enforcing, disabled

enforcing

Environment variable: QUARKUS_KEYCLOAK_POLICY_ENFORCER_PATHS__PATHS__CLAIM_INFORMATION_POINT

Map<String,Map<String,Map<String,String>>>

Environment variable: QUARKUS_KEYCLOAK_POLICY_ENFORCER_PATHS__PATHS__CLAIM_INFORMATION_POINT

Map<String,Map<String,String>>

Environment variable: QUARKUS_KEYCLOAK_POLICY_ENFORCER_CLAIM_INFORMATION_POINT

Map<String,Map<String,Map<String,String>>>

Environment variable: QUARKUS_KEYCLOAK_POLICY_ENFORCER_CLAIM_INFORMATION_POINT

Map<String,Map<String,String>>

Additional named tenants

デフォルト

Adapters will make separate HTTP invocations to the Keycloak server to turn an access code into an access token. This config option defines how many connections to the Keycloak server should be pooled

Environment variable: QUARKUS_KEYCLOAK__TENANT__CONNECTION_POOL_SIZE

int

20

Specifies how policies are enforced.

Environment variable: QUARKUS_KEYCLOAK__TENANT__POLICY_ENFORCER_ENFORCEMENT_MODE

permissive, enforcing, disabled

enforcing

The name of a resource on the server that is to be associated with a given path

Environment variable: QUARKUS_KEYCLOAK__TENANT__POLICY_ENFORCER_PATHS__PATHS__NAME

string

A URI relative to the application’s context path that should be protected by the policy enforcer

Environment variable: QUARKUS_KEYCLOAK__TENANT__POLICY_ENFORCER_PATHS__PATHS__PATH

string

The name of the HTTP method

Environment variable: QUARKUS_KEYCLOAK__TENANT__POLICY_ENFORCER_PATHS__PATHS__METHODS__METHODS__METHOD

string

required

An array of strings with the scopes associated with the method

Environment variable: QUARKUS_KEYCLOAK__TENANT__POLICY_ENFORCER_PATHS__PATHS__METHODS__METHODS__SCOPES

list of string

required

A string referencing the enforcement mode for the scopes associated with a method

Environment variable: QUARKUS_KEYCLOAK__TENANT__POLICY_ENFORCER_PATHS__PATHS__METHODS__METHODS__SCOPES_ENFORCEMENT_MODE

all, any, disabled

all

Specifies how policies are enforced

Environment variable: QUARKUS_KEYCLOAK__TENANT__POLICY_ENFORCER_PATHS__PATHS__ENFORCEMENT_MODE

permissive, enforcing, disabled

enforcing

Environment variable: QUARKUS_KEYCLOAK__TENANT__POLICY_ENFORCER_PATHS__PATHS__CLAIM_INFORMATION_POINT

Map<String,Map<String,Map<String,String>>>

Environment variable: QUARKUS_KEYCLOAK__TENANT__POLICY_ENFORCER_PATHS__PATHS__CLAIM_INFORMATION_POINT

Map<String,Map<String,String>>

Defines the limit of entries that should be kept in the cache

Environment variable: QUARKUS_KEYCLOAK__TENANT__POLICY_ENFORCER_PATH_CACHE_MAX_ENTRIES

int

1000

Defines the time in milliseconds when the entry should be expired

Environment variable: QUARKUS_KEYCLOAK__TENANT__POLICY_ENFORCER_PATH_CACHE_LIFESPAN

30000

Specifies how the adapter should fetch the server for resources associated with paths in your application. If true, the policy enforcer is going to fetch resources on-demand accordingly with the path being requested

Environment variable: QUARKUS_KEYCLOAK__TENANT__POLICY_ENFORCER_LAZY_LOAD_PATHS

boolean

true

Environment variable: QUARKUS_KEYCLOAK__TENANT__POLICY_ENFORCER_CLAIM_INFORMATION_POINT

Map<String,Map<String,Map<String,String>>>

Environment variable: QUARKUS_KEYCLOAK__TENANT__POLICY_ENFORCER_CLAIM_INFORMATION_POINT

Map<String,Map<String,String>>

Specifies how scopes should be mapped to HTTP methods. If set to true, the policy enforcer will use the HTTP method from the current request to check whether access should be granted

Environment variable: QUARKUS_KEYCLOAK__TENANT__POLICY_ENFORCER_HTTP_METHOD_AS_SCOPE

boolean

false