1.6. ステップアップ認証


io.quarkus.oidc.AuthenticationContext アノテーションを使用すると、1 つ以上の Authentication Context Class Reference (ACR) 値をリストして、Jakarta REST リソースクラスとメソッドに必要な認証レベルを適用できます。OAuth 2.0 Step Up Authentication Challenge Protocol は、トークンに期待される Authentication Context Class Reference (ACR) 値がない場合に、リソースサーバーがより強力な認証方法を要求できるメカニズムを導入します。以下の例を考慮してください。

package io.quarkus.it.oidc;

import io.quarkus.oidc.AuthenticationContext;
import io.quarkus.oidc.BearerTokenAuthentication;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;

@BearerTokenAuthentication
@Path("/")
public class GreetingsResource {

    @Path("hello")
    @AuthenticationContext("myACR") 
1

    @GET
    public String hello() {
        return "hello";
    }

    @Path("hi")
    @AuthenticationContext(value = "myACR", maxAge = "PT120m") 
2

    @GET
    public String hi() {
        return "hi";
    }
}
Copy to Clipboard Toggle word wrap
1
ベアラーアクセストークンには、myACR ACR 値を持つ acr クレームが必要です。
2
ベアラーアクセストークンには、myACR ACR 値を持つ acr クレームが必要であり、認証時刻から 120 分以内に使用される必要があります。
quarkus.http.auth.proactive=false 
1
Copy to Clipboard Toggle word wrap
1
プロアクティブ認証を無効にして、Quarkus が受信リクエストを認証する前に、@AuthenticationContext アノテーションをエンドポイントと一致できるようにします。

ベアラーアクセストークンクレーム acrmyACR が含まれていない場合、Quarkus は必要な acr_values を示す認証要件チャレンジを返します。

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer error="insufficient_user_authentication",
 error_description="A different authentication level is required",
 acr_values="myACR"
Copy to Clipboard Toggle word wrap

シングルページアプリケーション (SPA) などのクライアントが insufficient_user_authentication エラーコードを含むチャレンジを受信すると、acr_values を解析して、acr_values 制約を満たす新しいユーザーログインを要求し、新しいアクセストークンを使用して Quarkus にアクセスする必要があります。

注記

io.quarkus.oidc.AuthenticationContext アノテーションは、WebSockets Next サーバーエンドポイントに必要な認証レベルを強制するためにも使用できます。HTTP 接続が WebSocket 接続にアップグレードされる前に SecurityIdentity が作成されるため、アノテーションをエンドポイントクラスに配置する必要があります。HTTP アップグレードのセキュリティーの詳細は、Quarkus の 「WebSockets Next リファレンス」ガイドの Secure HTTP upgrade セクションを参照してください。

OIDC テナントに必要な認証レベルを強制することもできます。

quarkus.oidc.hr.token.required-claims.acr=myACR
Copy to Clipboard Toggle word wrap

または、より柔軟性が必要な場合は、Jose4j Validator を作成します。

package io.quarkus.it.oidc;

import java.util.Map;

import jakarta.enterprise.context.ApplicationScoped;

import org.jose4j.jwt.MalformedClaimException;
import org.jose4j.jwt.consumer.JwtContext;
import org.jose4j.jwt.consumer.Validator;

import io.quarkus.arc.Unremovable;
import io.quarkus.oidc.TenantFeature;
import io.quarkus.oidc.common.runtime.OidcConstants;
import io.quarkus.security.AuthenticationFailedException;

@Unremovable
@ApplicationScoped
@TenantFeature("hr")
public class AcrValueValidator implements Validator {

    @Override
    public String validate(JwtContext jwtContext) throws MalformedClaimException {
        var jwtClaims = jwtContext.getJwtClaims();
        if (jwtClaims.hasClaim("acr")) {
            var acrClaim = jwtClaims.getStringListClaimValue("acr");
            if (acrClaim.contains("myACR") && acrClaim.contains("yourACR")) {
                return null;
            }
        }
        String requiredAcrValues = "myACR,yourACR";
        throw new AuthenticationFailedException(Map.of(OidcConstants.ACR_VALUES, requiredAcrValues));
    }
}
Copy to Clipboard Toggle word wrap
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat