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

Using OpenID Connect (OIDC) and Keycloak to Centralize Authorization

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

The quarkus-keycloak-authorization extension is based on quarkus-oidc and provides a policy enforcer that enforces access to protected resources based on permissions managed by Keycloak and currently can only be used with the Quarkus OIDC service applications. It provides a flexible and dynamic authorization capability based on Resource-Based Access Control. In other words, instead of explicitly enforcing access based on some specific access control mechanism (e.g.: RBAC), you just check whether a request is allowed to access a resource based on its name, identifier or URI.

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

See the Using OpenID Connect to Protect Service Applications guide for more information about Bearer Token authentication mechanism. It is important to realize that it is the Bearer Token authentication mechanism which does the authentication and creates a security identity - while the quarkus-keycloak-authorization extension is responsible for applying a Keycloak Authorization Policy to this identity based on the current request path and other policy settings.

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

前提条件

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

  • 約15分

  • IDE

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

  • Apache Maven 3.8.1+

  • 動作するコンテナランタイム(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 ディレクトリ にあります。

プロジェクトの作成

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

CLI
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のインストール方法については、Quarkus CLIガイドをご参照ください。

Maven
mvn io.quarkus.platform:quarkus-maven-plugin:2.11.1.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 オプションを追加します。

This command generates a project, importing the keycloak-authorization extension which is an implementation of a Keycloak Adapter for Quarkus applications and provides all the necessary capabilities to integrate with a Keycloak Server and perform bearer token authorization.

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

CLI
quarkus extension add 'oidc,keycloak-authorization'
Maven
./mvnw quarkus:add-extension -Dextensions="oidc,keycloak-authorization"
Gradle
./gradlew addExtension --extensions="oidc,keycloak-authorization"

This will add the following to your build file:

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";
    }
}

Note that we did not define any annotation such as @RolesAllowed to explicitly enforce access to a resource. The extension will be responsible to map the URIs of the protected resources you have in Keycloak and evaluate the permissions accordingly, granting or denying access depending on the permissions that will be granted by 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
Adding a %prod. profile prefix to quarkus.oidc.auth-server-url ensures that Dev Services for Keycloak will launch a container for you when the application is run in a dev mode. See Running the Application in Dev mode section below for more information.
By default, applications using the quarkus-oidc extension are marked as a service type application (see quarkus.oidc.application-type). This extension also supports only web-app type applications but only if the access token returned as part of the authorization code grant response is marked as a source of roles: quarkus.oidc.roles.source=accesstoken (web-app type applications check ID token roles by default).

Keycloakサーバーの起動と設定

Do not start the Keycloak server when you run the application in a dev mode - Dev Services for Keycloak will launch a container. See Running the Application in Dev mode section below for more information.

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

where keycloak.version should be set to 17.0.0 or higher.

You should be able to access your Keycloak Server at localhost:8543.

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

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

After importing the realm you can see the resource permissions:

Keycloak

It explains why the endpoint has no @RolesAllowed annotations - the resource access permissions are set directly in Keycloak.

Running the Application in Dev mode

To run the application in dev mode, use:

CLI
quarkus dev
Maven
./mvnw quarkus:dev
Gradle
./gradlew --console=plain quarkusDev

Dev Services for Keycloak will launch a Keycloak container and import a quarkus-realm.json.

Open a Dev UI available at /q/dev and click on a Provider: Keycloak link in an OpenID Connect Dev UI card.

You will be asked to log in into a Single Page Application provided by OpenID Connect Dev UI:

  • Login as alice (password: alice) who only has a User Permission to access the /api/users/me resource

    • accessing /api/admin will return 403

    • accessing /api/users/me will return 200

  • Logout and login as admin (password: admin) who has both Admin Permission to access the /api/admin resource and User Permission to access the /api/users/me resource

    • accessing /api/admin will return 200

    • accessing /api/users/me will return 200

Running the Application in JVM mode

When you’re done playing with the dev mode" you can run it as a standard Java application.

まずコンパイルします。

CLI
quarkus build
Maven
./mvnw clean package
Gradle
./gradlew build

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

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

Running the Application in Native Mode

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

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

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

CLI
quarkus build --native
Maven
./mvnw package -Dnative
Gradle
./gradlew build -Dquarkus.package.type=native

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

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

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

See Running the Application in Dev mode section above about testing your application in a dev mode.

You can test the application launched in JVM or Native modes with curl.

アプリケーションはベアラートークン認可を使用しており、まず最初に行うべきことは、アプリケーションのリソースにアクセスするために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' \
 )

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

In some cases, you may want to programmatically check whether a request is granted to access a protected resource. By injecting a SecurityIdentity instance in your beans, you are allowed to check permissions as follows:

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();
                });
    }
}

Injecting the Authorization Client

In some cases, you may want to use the Keycloak Authorization Client Java API to perform specific operations like managing resources and obtaining permissions directly from Keycloak. For that, you can inject a AuthzClient instance into your beans as follows:

public class ProtectedResource {
    @Inject
    AuthzClient authzClient;
}

Note: If you want to use the AuthzClient directly make sure to set quarkus.keycloak.policy-enforcer.enable=true otherwise there is no Bean available for injection.

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

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

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

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

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

More About Configuring Protected Resources

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

To configure the protected routes using the @RolesAllowed annotation or the application.properties file, check the Using OpenID Connect Adapter to Protect JAX-RS Applications and Security Authorization guides. For more details, check the Security guide.

Access to Public Resources

If you’d like to access a public resource without quarkus-keycloak-authorization trying to apply its policies to it then you need to create a permit HTTP Policy configuration in application.properties as documented in the Security Authorization guide.

Disabling a policy check using a Keycloak Authorization Policy such as:

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

is no longer required.

If you’d like to block access to the public resource to anonymous users then you can create an enforcing Keycloak Authorization Policy:

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

Note only the default tenant configuration applies when controlling anonymous access to the public resource is required.

Multi-Tenancy

It is possible to configure multiple policy enforcer configurations, one per each tenant, similarly to how it can be done for Multi-Tenant OpenID Connect Service Applications.

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

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

long

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

long

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