1.2. OIDC リクエストフィルター
1 つ以上の OidcRequestFilter 実装を登録することで、OIDC クライアントから OIDC プロバイダーへの OIDC リクエストをフィルタリングできます。これにより、新しいリクエストヘッダーを更新または追加したり、リクエストボディーを分析したりすることができます。
1 つのフィルターですべての OIDC プロバイダーエンドポイントへのリクエストをインターセプトすることも、@OidcEndpoint アノテーションを使用してこのフィルターを特定のエンドポイントへのリクエストにのみ適用することもできます。以下に例を示します。
package io.quarkus.it.keycloak;
import jakarta.enterprise.context.ApplicationScoped;
import io.quarkus.arc.Unremovable;
import io.quarkus.oidc.common.OidcEndpoint;
import io.quarkus.oidc.common.OidcRequestFilter;
import io.vertx.core.http.HttpMethod;
@ApplicationScoped
@OidcEndpoint(value = Type.TOKEN)
@Unremovable
public class OidcRequestCustomizer implements OidcRequestFilter {
@Override
public void filter(OidcRequestContext requestContext) {
HttpMethod method = requestContext.request().method();
String uri = requestContext.request().uri();
if (method == HttpMethod.POST && uri.endsWith("/token") && requestContext.requestBody() != null) {
requestContext.request().putHeader("Digest", calculateDigest(requestContext.requestBody().toString()));
}
}
private String calculateDigest(String bodyString) {
// Apply the required digest algorithm to the body string
}
}
OidcRequestContextProperties を使用して、リクエストのプロパティーにアクセスできます。現在は、client_id キーを使用してクライアントテナント ID にアクセスできます。また、grant_type キーを使用して、OIDC クライアントがトークンを取得するために使用するグラントタイプにアクセスできます。