The English version of quarkus.io is the official project site. Translated sites are community supported on a best-effort basis.
このページを編集

OpenID Connect (OIDC) と OAuth2 の動的クライアント登録

この技術は、experimentalと考えられています。

experimental モードでは、アイデアを成熟させるために早期のフィードバックが求められます。ソリューションが成熟するまでの間、プラットフォームの安定性や長期的な存在を保証するものではありません。フィードバックは メーリングリストGitHubの課題管理 で受け付けています。

とりうるステータスの完全なリストについては、 FAQの項目 を参照してください。

通常、OIDC プロバイダーのダッシュボードで OIDC クライアント (アプリケーション) を手動で登録する必要があります。 このプロセスでは、人間が判読できるアプリケーション名、許可されるリダイレクト URL とログアウト後の URL、およびその他のプロパティーを指定します。 登録が完了したら、生成されたクライアント ID とシークレットを Quarkus OIDC アプリケーションプロパティーにコピーします。

OpenID Connect と OAuth2 の動的クライアント登録を使用すると、OIDC クライアントを動的に登録し、個々のクライアント登録を管理できます。 詳細は、 OIDC クライアント登録 および OAuth2 動的クライアント登録管理プロトコル の仕様ドキュメントを参照してください。

Quarkus の quarkus-oidc-client-registration エクステンションを使用すると、OIDC クライアント登録設定を使用して 1 つ以上のクライアントを登録し、登録されたクライアントのメタデータを読み取り、更新、削除できます。

OIDC TenantConfigResolver は、登録されたクライアントのメタデータを使用してOIDCテナントコンフィギュレーションを作成するために使用できます。

現在、Quarkus の quarkus-oidc-client-registration エクステンションは experimental ステータスです。 このエクステンションが experimental ステータスである間、このエクステンションによって提供される動的クライアント登録 API は変更される可能性があります。

OIDC クライアント登録

次の依存関係を追加します。

<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-oidc-client-registration</artifactId>
</dependency>

quarkus-oidc-client-registration エクステンションを使用すると、起動時または必要に応じて OIDC クライアント登録設定を使用して 1 つ以上のクライアントを登録し、登録されたクライアントのメタデータを読み取り、更新、削除できます。

カスタム OIDC TenantConfigResolver からクライアント登録を登録・管理することができます。

または、OIDC を使用せずにクライアントを登録することもできます。たとえば、クライアントを登録し、登録されたクライアントのメタデータを必要とする Quarkus サービスにそのメタデータを渡すコマンドラインツールを使用できます。

各 OIDC クライアント登録設定は、多数の個別のクライアント登録を受け入れることができる OIDC クライアント登録エンドポイントを表します。

起動時のクライアント登録

まず、1 つ以上の OIDC クライアント登録設定を宣言します。次に例を示します。

# Default OIDC client registration which auto-discovers a standard client registration endpoint.
# It does not require an initial registration token.

quarkus.oidc-client-registration.auth-server-url=${quarkus.oidc.auth-server-url}
quarkus.oidc-client-registration.metadata.client-name=Default Client
quarkus.oidc-client-registration.metadata.redirect-uri=http://localhost:8081/protected

# Named OIDC client registration which configures a registration endpoint path:
# It require an initial registration token for a client registration to succeed.

quarkus.oidc-client-registration.tenant-client.registration-path=${quarkus.oidc.auth-server-url}/clients-registrations/openid-connect
quarkus.oidc-client-registration.tenant-client.metadata.client-name=Tenant Client
quarkus.oidc-client-registration.tenant-client.metadata.redirect-uri=http://localhost:8081/protected/tenant
quarkus.oidc-client-registration.initial-token=${initial-registration-token}

上記の設定により、OIDC プロバイダーに 2 つの新しいクライアント登録が作成されます。

初期登録アクセストークンを取得する必要がない場合もあります。取得しない場合は、OIDC プロバイダーのダッシュボードで 1 つ以上のクライアント登録ポリシーを有効にする必要があります。たとえば、 Keycloak クライアント登録ポリシー を参照してください。

次のステップで、デフォルトのクライアント登録を 1 つだけ行う場合は quarkus.oidc.client.registration.OidcClientRegistration を、複数の登録を設定する場合は quarkus.oidc.client.registration.OidcClientRegistrations を挿入し、これらの設定で登録されたクライアントのメタデータを使用します。

例:

package io.quarkus.it.keycloak;

import java.net.URI;
import java.util.List;
import java.util.Optional;

import jakarta.inject.Inject;
import jakarta.inject.Singleton;

import org.eclipse.microprofile.config.inject.ConfigProperty;

import io.quarkus.oidc.OidcRequestContext;
import io.quarkus.oidc.OidcTenantConfig;
import io.quarkus.oidc.OidcTenantConfig.ApplicationType;
import io.quarkus.oidc.TenantConfigResolver;
import io.quarkus.oidc.client.registration.ClientMetadata;
import io.quarkus.oidc.client.registration.OidcClientRegistration;
import io.quarkus.oidc.client.registration.OidcClientRegistrations;
import io.quarkus.oidc.client.registration.RegisteredClient;
import io.smallrye.mutiny.Uni;
import io.vertx.ext.web.RoutingContext;

@Singleton
public class CustomTenantConfigResolver implements TenantConfigResolver {

    @Inject
    OidcClientRegistration clientReg;

    @Inject
    OidcClientRegistrations clientRegs;

    @Override
    public Uni<OidcTenantConfig> resolve(RoutingContext routingContext,
            OidcRequestContext<OidcTenantConfig> requestContext) {

        if (routingContext.request().path().endsWith("/protected")) {
            // Use the registered client created from the default OIDC client registration
            return clientReg.registeredClient().onItem().transform(client -> createTenantConfig("registered-client", client));
        } else if (routingContext.request().path().endsWith("/protected/tenant")) {
            // Use the registered client created from the named 'tenant-client' OIDC client registration
            OidcClientRegistration tenantClientReg = clientRegs.getClientRegistration("tenant-client");
            return tenantClientReg.registeredClient().onItem().transform(client -> createTenantConfig("registered-client-tenant", client));
        }
        return null;
    }

    // Convert metadata of registered clients to OidcTenantConfig
    private OidcTenantConfig createTenantConfig(String tenantId, RegisteredClient client) {
        ClientMetadata metadata = client.getMetadata();

        String redirectPath = URI.create(metadata.getRedirectUris().get(0)).getPath();
        OidcTenantConfig oidcConfig = OidcTenantConfig
                .authServerUrl(authServerUrl)
                .tenantId(tenantId)
                .applicationType(ApplicationType.WEB_APP)
                .clientName(metadata.getClientName())
                .clientId(metadata.getClientId())
                .credentials(metadata.getClientSecret())
                .authentication().redirectPath(redirectPath).end()
                .build();
        return oidcConfig;
    }
}

必要に応じたクライアント登録

必要に応じて新しいクライアントを登録できます。 既存の設定済みの OidcClientConfiguration または新しく作成された OidcClientConfiguration に新しいクライアントを追加できます。

まず、1 つ以上の OIDC クライアント登録を設定します。

quarkus.oidc-client-registration.auth-server-url=${quarkus.oidc.auth-server-url}

上記の設定は、この設定を使用して新しいクライアントを登録するのに十分なものです。次に例を示します。

package io.quarkus.it.keycloak;

import java.net.URI;
import java.util.List;
import java.util.Optional;

import jakarta.inject.Inject;
import jakarta.inject.Singleton;

import org.eclipse.microprofile.config.inject.ConfigProperty;

import io.quarkus.oidc.OidcRequestContext;
import io.quarkus.oidc.OidcTenantConfig;
import io.quarkus.oidc.OidcTenantConfig.ApplicationType;
import io.quarkus.oidc.TenantConfigResolver;
import io.quarkus.oidc.client.registration.ClientMetadata;
import io.quarkus.oidc.client.registration.OidcClientRegistration;
import io.smallrye.mutiny.Uni;
import io.vertx.ext.web.RoutingContext;

@Singleton
public class CustomTenantConfigResolver implements TenantConfigResolver {

    @Inject
    OidcClientRegistration clientReg;

    @Inject
    @ConfigProperty(name = "quarkus.oidc.auth-server-url")
    String authServerUrl;


    @Override
    public Uni<OidcTenantConfig> resolve(RoutingContext routingContext,
            OidcRequestContext<OidcTenantConfig> requestContext) {
        if (routingContext.request().path().endsWith("/protected/oidc-client-reg-existing-config")) {
            // New client registration done dynamically at the request time using the configured client registration
            ClientMetadata metadata = createMetadata("http://localhost:8081/protected/dynamic-tenant",
                    "Dynamic Tenant Client");

            return clientReg.registerClient(metadata).onItem().transform(r ->
                  createTenantConfig("registered-client-dynamically", r));
        }
        return null;
    }

    // Create metadata of registered clients to OidcTenantConfig
    private OidcTenantConfig createTenantConfig(String tenantId, ClientMetadata metadata) {
        String redirectPath = URI.create(metadata.getRedirectUris().get(0)).getPath();
        OidcTenantConfig oidcConfig = OidcTenantConfig
                .authServerUrl(authServerUrl)
                .tenantId(tenantId)
                .applicationType(ApplicationType.WEB_APP)
                .clientName(metadata.getClientName())
                .clientId(metadata.getClientId())
                .credentials(metadata.getClientSecret())
                .authentication().redirectPath(redirectPath).end()
                .build();
        return oidcConfig;
    }

    protected static ClientMetadata createMetadata(String redirectUri, String clientName) {
        return ClientMetadata.builder()
                .setRedirectUri(redirectUri)
                .setClientName(clientName)
                .build();
    }
}

または、OidcClientRegistrations を使用して新しい OidcClientRegistration を準備し、OidcClientRegistration を使用してクライアントを登録することもできます。次に例を示します。

package io.quarkus.it.keycloak;

import java.net.URI;
import java.util.List;
import java.util.Map;
import java.util.Optional;

import jakarta.inject.Inject;
import jakarta.inject.Singleton;

import org.eclipse.microprofile.config.inject.ConfigProperty;

import io.quarkus.oidc.OidcRequestContext;
import io.quarkus.oidc.OidcTenantConfig;
import io.quarkus.oidc.OidcTenantConfig.ApplicationType;
import io.quarkus.oidc.TenantConfigResolver;
import io.quarkus.oidc.client.registration.ClientMetadata;
import io.quarkus.oidc.client.registration.OidcClientRegistration;
import io.quarkus.oidc.client.registration.OidcClientRegistrations;
import io.quarkus.oidc.client.registration.OidcClientRegistrationConfig;
import io.smallrye.mutiny.Uni;
import io.vertx.ext.web.RoutingContext;

@Singleton
public class CustomTenantConfigResolver implements TenantConfigResolver {

    @Inject
    OidcClientRegistrations clientRegs;

    @Inject
    @ConfigProperty(name = "quarkus.oidc.auth-server-url")
    String authServerUrl;

    @Override
    public Uni<OidcTenantConfig> resolve(RoutingContext routingContext,
            OidcRequestContext<OidcTenantConfig> requestContext) {
        if (routingContext.request().path().endsWith("/protected/new-oidc-client-reg")) {
            // New client registration done dynamically at the request time

            OidcClientRegistrationConfig clientRegConfig = OidcClientRegistrationConfig
                    .authServerUrl(authServerUrl)
                    .metadata("Dynamic Client", "http://localhost:8081/protected/new-oidc-client-reg")
                    .build();

            return clientRegs.newClientRegistration(clientRegConfig)
                    .onItem().transform(reg ->
                    createTenantConfig("registered-client-dynamically", reg.registeredClient());
        }

        return null;
    }

    // Create metadata of registered clients to OidcTenantConfig
    private OidcTenantConfig createTenantConfig(String tenantId, ClientMetadata metadata) {
        String redirectPath = URI.create(metadata.getRedirectUris().get(0)).getPath();
        OidcTenantConfig oidcConfig = OidcTenantConfig
                .authServerUrl(authServerUrl)
                .tenantId(tenantId)
                .applicationType(ApplicationType.WEB_APP)
                .clientName(metadata.getClientName())
                .clientId(metadata.getClientId())
                .credentials(metadata.getClientSecret())
                .authentication().redirectPath(redirectPath).end()
                .build();
        return oidcConfig;
    }

    protected static ClientMetadata createMetadata(String redirectUri, String clientName) {
        return ClientMetadata.builder()
                .setRedirectUri(redirectUri)
                .setClientName(clientName)
                .build();
    }
}

登録クライアントの管理

io.quarkus.oidc.client.registration.RegisteredClient は登録されたクライアントを表し、そのメタデータの読み取りと更新に使用できます。 このクライアントを削除する場合にも使用できます。

例:

package io.quarkus.it.keycloak;


import jakarta.enterprise.event.Observes;
import jakarta.inject.Inject;
import jakarta.inject.Singleton;

import io.quarkus.oidc.OidcRequestContext;
import io.quarkus.oidc.OidcTenantConfig;
import io.quarkus.oidc.TenantConfigResolver;
import io.quarkus.oidc.client.registration.OidcClientRegistration;
import io.quarkus.oidc.client.registration.RegisteredClient;
import io.quarkus.runtime.StartupEvent;
import io.smallrye.mutiny.Uni;
import io.vertx.ext.web.RoutingContext;

@Singleton
public class CustomTenantConfigResolver implements TenantConfigResolver {

    @Inject
    OidcClientRegistration clientReg;

    RegisteredClient registeredClient;

    void onStartup(@Observes StartupEvent event) {

        // Default OIDC client registration, client has already been registered at startup, `await()` will return immediately.
        registeredClient = clientReg.registeredClient().await().indefinitely();

        // Read the latest client metadata
        registeredClient = registeredClient.read().await().indefinitely();
    }

    @Override
    public Uni<OidcTenantConfig> resolve(RoutingContext routingContext,
            OidcRequestContext<OidcTenantConfig> requestContext) {

        if (routingContext.request().path().endsWith("/protected")) {
            // Use the registered client created from the default OIDC client registration

            return createTenantConfig("registered-client", registeredClient));
        }
        return null;
    }

    // Convert metadata of registered clients to OidcTenantConfig
    private OidcTenantConfig createTenantConfig(String tenantId, RegisteredClient client) {
        ClientMetadata metadata = client.getMetadata();

        String redirectPath = URI.create(metadata.getRedirectUris().get(0)).getPath();
        OidcTenantConfig oidcConfig = OidcTenantConfig
                .authServerUrl(authServerUrl)
                .tenantId(tenantId)
                .applicationType(ApplicationType.WEB_APP)
                .clientName(metadata.getClientName())
                .clientId(metadata.getClientId())
                .credentials(metadata.getClientSecret())
                .authentication().redirectPath(redirectPath).end()
                .build();
        return oidcConfig;
    }
}

重複した登録の回避

起動時のクライアント登録 セクションの説明に従って起動時にクライアントを登録する場合は、おそらく再起動後に重複した登録を作成しないようにする必要があるでしょう。

この場合、起動時ではなくリクエスト時に登録を実行するように OIDC クライアント登録を設定する必要があります。

quarkus.oidc-client-registration.register-early=false

次に、シャットダウン時にすでに登録されているクライアントの登録 URI と登録トークンを保持する必要があります。これらは、io.quarkus.oidc.client.registration.RegisteredClient インスタンスから取得できます。

最後に、起動時に、すでに登録されているクライアントを再度登録するのではなく、そのクライアントを復元する必要があります。

例:

package io.quarkus.it.keycloak;


import jakarta.enterprise.event.Observes;
import jakarta.inject.Inject;
import jakarta.inject.Singleton;

import io.quarkus.oidc.OidcRequestContext;
import io.quarkus.oidc.OidcTenantConfig;
import io.quarkus.oidc.TenantConfigResolver;
import io.quarkus.oidc.client.registration.OidcClientRegistration;
import io.quarkus.oidc.client.registration.RegisteredClient;
import io.quarkus.runtime.ShutdownEvent;
import io.quarkus.runtime.StartupEvent;
import io.smallrye.mutiny.Uni;
import io.vertx.ext.web.RoutingContext;

@Singleton
public class CustomTenantConfigResolver implements TenantConfigResolver {

    @Inject
    OidcClientRegistration clientReg;

    RegisteredClient registeredClient;

    void onStartup(@Observes StartupEvent event) {

        String registrationUri = readRegistrationUriFromDatabase("Registered Client");
        String registrationToken = readRegistrationTokenFromDatabase("Registered Client");

        if (registrationUri != null && registrationToken != null) {
            // Read an already registered client
            registeredClient = clientReg.readClient(registrationUri, registrationToken).await().indefinitely();
        } else {
            // Register a new client
            registeredClient = clientReg.registeredClient().await().indefinitely();
        }

    }

    void onShutdown(@Observes ShutdownEvent event) {

        saveRegistrationUriToDatabase("Registered Client", registeredClient.registrationUri());
        saveRegistrationTokenToDatabase("Registered Client", registeredClient.registrationToken());

    }

    String readRegistrationUriFromDatabase(String clientName) {
        // implementation is not shown for brevity
    }
    String readRegistrationTokenFromDatabase(String clientName) {
        // implementation is not shown for brevity
    }
    void saveRegistrationUriToDatabase(String clientName, String registrationUri) {
        // implementation is not shown for brevity
    }
    void saveRegistrationTokenToDatabase(String clientName, String registrationToken) {
        // implementation is not shown for brevity
    }

    @Override
    public Uni<OidcTenantConfig> resolve(RoutingContext routingContext,
            OidcRequestContext<OidcTenantConfig> requestContext) {

        if (routingContext.request().path().endsWith("/protected")) {
            // Use the registered client created from the default OIDC client registration

            return createTenantConfig("registered-client", registeredClient));
        }
        return null;
    }

    // Convert metadata of registered clients to OidcTenantConfig
    private OidcTenantConfig createTenantConfig(String tenantId, RegisteredClient client) {
        ClientMetadata metadata = client.getMetadata();

        String redirectPath = URI.create(metadata.getRedirectUris().get(0)).getPath();
        OidcTenantConfig oidcConfig = OidcTenantConfig
                .authServerUrl(authServerUrl)
                .tenantId(tenantId)
                .applicationType(ApplicationType.WEB_APP)
                .clientName(metadata.getClientName())
                .clientId(metadata.getClientId())
                .credentials(metadata.getClientSecret())
                .authentication().redirectPath(redirectPath).end()
                .build();
        return oidcConfig;
    }
}

必要に応じたクライアント登録 セクションの説明に従ってクライアントを動的に必要に応じて登録する場合は、重複したクライアント登録の問題は発生しないはずです。 ただし、必要に応じて、すでに登録されているクライアントの登録 URI と登録トークンを保持し、それらを確認することで、重複した予約が発生するリスクを回避できます。

OIDC リクエストフィルター

1 つ以上の OidcRequestFilter 実装を登録することで、OIDC クライアント登録と登録済みクライアントリクエストをフィルタリングできます。これにより、新しいリクエストヘッダーを更新または追加できます。たとえば、フィルターでリクエストボディーを分析し、そのダイジェストを新しいヘッダー値として追加できます。

すべての OIDC 登録と登録済みクライアントリクエストをインターセプトする単一のフィルターを使用することも、@OidcEndpoint アノテーションを使用してこのフィルターを OIDC 登録または登録済みクライアントエンドポイントレスポンスのみに適用することもできます。次に例を示します。

package io.quarkus.it.keycloak;

import org.jboss.logging.Logger;

import io.quarkus.arc.Unremovable;
import io.quarkus.oidc.common.OidcEndpoint;
import io.quarkus.oidc.common.OidcEndpoint.Type;
import io.quarkus.oidc.common.OidcRequestFilter;
import io.vertx.core.json.JsonObject;
import jakarta.enterprise.context.ApplicationScoped;

@ApplicationScoped
@Unremovable
@OidcEndpoint(value = Type.CLIENT_REGISTRATION) (1)
public class ClientRegistrationRequestFilter implements OidcRequestFilter {
    private static final Logger LOG = Logger.getLogger(ClientRegistrationRequestFilter.class);

    @Override
    public void filter(OidcRequestContext rc) {
        JsonObject body = rc.requestBody().toJsonObject();
        if ("Default Client".equals(body.getString("client_name"))) { (2)
            LOG.debug("'Default Client' registration request");
        }
    }

}
1 このフィルターを、OIDC クライアント登録エンドポイントのみを対象とするリクエストに制限します。
2 リクエストメタデータ JSON の 'client_name' プロパティーを確認します。

OidcRequestContextProperties を使用して、リクエストプロパティーにアクセスできます。 現在、client_id キーを使用してクライアントテナント ID にアクセスし、grant_type キーを使用して、OIDC クライアントがトークンの取得に使用するグラントタイプにアクセスできます。

OIDC レスポンスフィルター

1 つ以上の OidcResponseFilter 実装を登録することで、OIDC クライアント登録および登録済みクライアントリクエストへのレスポンスをフィルタリングできます。これにより、レスポンスのステータス、ヘッダー、ボディーをチェックしてログに記録したり、その他のアクションを実行したりできます。

すべての OIDC 登録および登録済みクライアントリクエストへのレスポンスをインターセプトする単一のフィルターを使用することも、@OidcEndpoint アノテーションを使用してこのフィルターを OIDC 登録または登録済みクライアントエンドポイントからのレスポンスにのみ適用することもできます。次に例を示します。

package io.quarkus.it.keycloak;

import jakarta.enterprise.context.ApplicationScoped;

import org.jboss.logging.Logger;

import io.quarkus.arc.Unremovable;
import io.quarkus.oidc.common.OidcEndpoint;
import io.quarkus.oidc.common.OidcEndpoint.Type;
import io.quarkus.oidc.common.OidcResponseFilter;
import io.vertx.core.json.JsonObject;

@ApplicationScoped
@Unremovable
@OidcEndpoint(value = Type.CLIENT_REGISTRATION) (1)
public class ClientRegistrationResponseFilter implements OidcResponseFilter {
    private static final Logger LOG = Logger.getLogger(ClientRegistrationResponseFilter.class);

    @Override
    public void filter(OidcResponseContext rc) {
        String contentType = rc.responseHeaders().get("Content-Type"); (2)
        JsonObject body = rc.responseBody().toJsonObject();
        if (contentType.startsWith("application/json")
                && "Default Client".equals(body.getString("client_name"))) { (3)
            LOG.debug("'Default Client' has been registered");
        }
    }

}
1 このフィルターを、OIDC クライアント登録エンドポイントのみを対象とするリクエストに制限します。
2 レスポンスの Content-Type ヘッダーを確認します。
3 レスポンスメタデータ JSON の 'client_name' プロパティーを確認します。

または

package io.quarkus.it.keycloak;

import jakarta.enterprise.context.ApplicationScoped;

import org.jboss.logging.Logger;

import io.quarkus.arc.Unremovable;
import io.quarkus.oidc.common.OidcEndpoint;
import io.quarkus.oidc.common.OidcEndpoint.Type;
import io.quarkus.oidc.common.OidcResponseFilter;

@ApplicationScoped
@Unremovable
@OidcEndpoint(value = Type.REGISTERED_CLIENT) (1)
public class RegisteredClientResponseFilter implements OidcResponseFilter {
    private static final Logger LOG = Logger.getLogger(RegisteredClientResponseFilter.class);

    @Override
    public void filter(OidcResponseContext rc) {
        String contentType = rc.responseHeaders().get("Content-Type"); (2)
        if (contentType.startsWith("application/json")
                && "Default Client Updated".equals(rc.responseBody().toJsonObject().getString("client_name"))) { (3)
            LOG.debug("Registered 'Default Client' has had its name updated to 'Default Client Updated'");
        }
    }

}
1 このフィルターを、登録済み OIDC クライアントエンドポイントのみを対象とするリクエストに制限します。
2 レスポンスの Content-Type ヘッダーを確認します。
3 クライアント名プロパティーが更新されたことを確認します。

設定リファレンス

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

Configuration property

デフォルト

If the OIDC client registration extension is enabled.

Environment variable: QUARKUS_OIDC_CLIENT_REGISTRATION_ENABLED

Show more

boolean

true

quarkus.oidc-client-registration."id".auth-server-url

The base URL of the OpenID Connect (OIDC) server, for example, https://host:port/auth. Do not set this property if you use 'quarkus-oidc' and the public key verification (public-key) or certificate chain verification only (certificate-chain) is required. The OIDC discovery endpoint is called by default by appending a .well-known/openid-configuration path to this URL. For Keycloak, use https://host:port/realms/{realm}, replacing {realm} with the Keycloak realm name.

Environment variable: QUARKUS_OIDC_CLIENT_REGISTRATION_AUTH_SERVER_URL

Show more

string

quarkus.oidc-client-registration."id".discovery-enabled

Discovery of the OIDC endpoints. If not enabled, you must configure the OIDC endpoint URLs individually.

Environment variable: QUARKUS_OIDC_CLIENT_REGISTRATION_DISCOVERY_ENABLED

Show more

boolean

true

quarkus.oidc-client-registration."id".registration-path

The relative path or absolute URL of the OIDC dynamic client registration endpoint. Set if discovery-enabled is false or a discovered token endpoint path must be customized.

Environment variable: QUARKUS_OIDC_CLIENT_REGISTRATION_REGISTRATION_PATH

Show more

string

quarkus.oidc-client-registration."id".connection-delay

The duration to attempt the initial connection to an OIDC server. For example, setting the duration to 20S allows 10 retries, each 2 seconds apart. This property is only effective when the initial OIDC connection is created. For dropped connections, use the connection-retry-count property instead.

Environment variable: QUARKUS_OIDC_CLIENT_REGISTRATION_CONNECTION_DELAY

Show more

Duration 

quarkus.oidc-client-registration."id".connection-retry-count

The number of times to retry re-establishing an existing OIDC connection if it is temporarily lost. Different from connection-delay, which applies only to initial connection attempts. For instance, if a request to the OIDC token endpoint fails due to a connection issue, it will be retried as per this setting.

Environment variable: QUARKUS_OIDC_CLIENT_REGISTRATION_CONNECTION_RETRY_COUNT

Show more

int

3

quarkus.oidc-client-registration."id".connection-timeout

The number of seconds after which the current OIDC connection request times out.

Environment variable: QUARKUS_OIDC_CLIENT_REGISTRATION_CONNECTION_TIMEOUT

Show more

Duration 

10S

quarkus.oidc-client-registration."id".use-blocking-dns-lookup

Whether DNS lookup should be performed on the worker thread. Use this option when you can see logged warnings about blocked Vert.x event loop by HTTP requests to OIDC server.

Environment variable: QUARKUS_OIDC_CLIENT_REGISTRATION_USE_BLOCKING_DNS_LOOKUP

Show more

boolean

false

quarkus.oidc-client-registration."id".max-pool-size

The maximum size of the connection pool used by the WebClient.

Environment variable: QUARKUS_OIDC_CLIENT_REGISTRATION_MAX_POOL_SIZE

Show more

int

quarkus.oidc-client-registration."id".follow-redirects

Follow redirects automatically when WebClient gets HTTP 302. When this property is disabled only a single redirect to exactly the same original URI is allowed but only if one or more cookies were set during the redirect request.

Environment variable: QUARKUS_OIDC_CLIENT_REGISTRATION_FOLLOW_REDIRECTS

Show more

boolean

true

quarkus.oidc-client-registration."id".id

OIDC Client Registration id

Environment variable: QUARKUS_OIDC_CLIENT_REGISTRATION_ID

Show more

string

quarkus.oidc-client-registration."id".registration-enabled

If this client registration configuration is enabled.

Environment variable: QUARKUS_OIDC_CLIENT_REGISTRATION_REGISTRATION_ENABLED

Show more

boolean

true

quarkus.oidc-client-registration."id".register-early

If the client configured with metadata must be registered at startup.

Environment variable: QUARKUS_OIDC_CLIENT_REGISTRATION_REGISTER_EARLY

Show more

boolean

true

quarkus.oidc-client-registration."id".initial-token

Initial access token

Environment variable: QUARKUS_OIDC_CLIENT_REGISTRATION_INITIAL_TOKEN

Show more

string

quarkus.oidc-client-registration."id".metadata.client-name

Client name

Environment variable: QUARKUS_OIDC_CLIENT_REGISTRATION_METADATA_CLIENT_NAME

Show more

string

quarkus.oidc-client-registration."id".metadata.redirect-uri

Redirect URI

Environment variable: QUARKUS_OIDC_CLIENT_REGISTRATION_METADATA_REDIRECT_URI

Show more

string

quarkus.oidc-client-registration."id".metadata.post-logout-uri

Post Logout URI

Environment variable: QUARKUS_OIDC_CLIENT_REGISTRATION_METADATA_POST_LOGOUT_URI

Show more

string

quarkus.oidc-client-registration."id".metadata.extra-props."extra-props"

Additional metadata properties

Environment variable: QUARKUS_OIDC_CLIENT_REGISTRATION_METADATA_EXTRA_PROPS__EXTRA_PROPS_

Show more

Map<String,String>

HTTP proxy configuration

デフォルト

quarkus.oidc-client-registration."id".proxy.host

The host name or IP address of the Proxy.
Note: If the OIDC adapter requires a Proxy to talk with the OIDC server (Provider), set this value to enable the usage of a Proxy.

Environment variable: QUARKUS_OIDC_CLIENT_REGISTRATION_PROXY_HOST

Show more

string

quarkus.oidc-client-registration."id".proxy.port

The port number of the Proxy. The default value is 80.

Environment variable: QUARKUS_OIDC_CLIENT_REGISTRATION_PROXY_PORT

Show more

int

80

quarkus.oidc-client-registration."id".proxy.username

The username, if the Proxy needs authentication.

Environment variable: QUARKUS_OIDC_CLIENT_REGISTRATION_PROXY_USERNAME

Show more

string

quarkus.oidc-client-registration."id".proxy.password

The password, if the Proxy needs authentication.

Environment variable: QUARKUS_OIDC_CLIENT_REGISTRATION_PROXY_PASSWORD

Show more

string

TLS configuration

デフォルト

quarkus.oidc-client-registration."id".tls.tls-configuration-name

The name of the TLS configuration to use.

If a name is configured, it uses the configuration from quarkus.tls.<name>.* If a name is configured, but no TLS configuration is found with that name then an error will be thrown.

The default TLS configuration is not used by default.

Environment variable: QUARKUS_OIDC_CLIENT_REGISTRATION_TLS_TLS_CONFIGURATION_NAME

Show more

string

期間フォーマットについて

To write duration values, use the standard java.time.Duration format. See the Duration#parse() Java API documentation for more information.

数字で始まる簡略化した書式を使うこともできます:

  • 数値のみの場合は、秒単位の時間を表します。

  • 数値の後に ms が続く場合は、ミリ秒単位の時間を表します。

その他の場合は、簡略化されたフォーマットが解析のために java.time.Duration フォーマットに変換されます:

  • 数値の後に hms が続く場合は、その前に PT が付けられます。

  • 数値の後に d が続く場合は、その前に P が付けられます。

関連コンテンツ