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 の |
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: Show more |
boolean |
|
The base URL of the OpenID Connect (OIDC) server, for example, Environment variable: Show more |
string |
|
Discovery of the OIDC endpoints. If not enabled, you must configure the OIDC endpoint URLs individually. Environment variable: Show more |
boolean |
|
The relative path or absolute URL of the OIDC dynamic client registration endpoint. Set if Environment variable: Show more |
string |
|
The duration to attempt the initial connection to an OIDC server. For example, setting the duration to Environment variable: Show more |
||
The number of times to retry re-establishing an existing OIDC connection if it is temporarily lost. Different from Environment variable: Show more |
int |
|
The number of seconds after which the current OIDC connection request times out. Environment variable: Show more |
|
|
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: Show more |
boolean |
|
The maximum size of the connection pool used by the WebClient. Environment variable: Show more |
int |
|
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: Show more |
boolean |
|
OIDC Client Registration id Environment variable: Show more |
string |
|
If this client registration configuration is enabled. Environment variable: Show more |
boolean |
|
If the client configured with Environment variable: Show more |
boolean |
|
Initial access token Environment variable: Show more |
string |
|
Client name Environment variable: Show more |
string |
|
Redirect URI Environment variable: Show more |
string |
|
Post Logout URI Environment variable: Show more |
string |
|
Additional metadata properties Environment variable: Show more |
Map<String,String> |
|
型 |
デフォルト |
|
The host name or IP address of the Proxy. Environment variable: Show more |
string |
|
The port number of the Proxy. The default value is Environment variable: Show more |
int |
|
The username, if the Proxy needs authentication. Environment variable: Show more |
string |
|
The password, if the Proxy needs authentication. Environment variable: Show more |
string |
|
型 |
デフォルト |
|
The name of the TLS configuration to use. If a name is configured, it uses the configuration from The default TLS configuration is not used by default. Environment variable: Show more |
string |
期間フォーマットについて
To write duration values, use the standard 数字で始まる簡略化した書式を使うこともできます:
その他の場合は、簡略化されたフォーマットが解析のために
|