1.2. 送信者制限アクセストークン
1.2.1. Demonstrating Proof of Possession (DPoP) リンクのコピーリンクがクリップボードにコピーされました!
RFC9449 では、アクセストークンを現在のクライアントに暗号的にバインドし、アクセストークンの紛失やリプレイを防ぐための Demonstrating Proof of Possession (DPoP) メカニズムを説明しています。
Single Page Application (SPA) パブリッククライアントは、DPoP 証明トークンを生成し、それを使用して DPoP 証明に暗号的にバインドされたアクセストークンを取得および送信します。
Quarkus で DPoP サポートを有効にするには、1 つのプロパティーが必要です。
以下に例を示します。
quarkus.oidc.auth-server-url=${your_oidc_provider_url}
quarkus.oidc.token.authorization-scheme=dpop
- 1
- アクセストークンは HTTP
Authorization DPoPスキーム値を使用して提供される必要があります。
このようなトークンを受け入れた後、Quarkus は完全な DPoP トークン検証プロセス を実行します。
将来的にはカスタム DPoP nonce プロバイダーのサポートが提供される予定です。
1.2.2. 相互 TLS トークンバインディング リンクのコピーリンクがクリップボードにコピーされました!
RFC8705 では、アクセストークンを Mutual TLS (mTLS) クライアント認証証明書にバインドするメカニズムを説明しています。クライアント証明書の SHA256 サムプリントが JWT トークンまたはトークンイントロスペクション確認 x5t#S256 証明書サムプリントと一致する必要があります。
たとえば、RFC8705 の JWT Certificate Thumbprint Confirmation Method および Confirmation Method for Token Introspection セクションを参照してください。
MTLS トークンバインディングは holder of key の概念をサポートしており、現在のアクセストークンがこのトークンを提示する現在の認証済みクライアントに発行されたことを確認するために使用できます。
mTLS と OIDC ベアラー認証メカニズムの両方を使用する場合、Quarkus エンドポイントと Quarkus OIDC で mTLS の使用を要求するように設定した後、強制的にアクセストークンが単一のプロパティーで証明書にバインドされるように指定できます。
以下に例を示します。
quarkus.oidc.auth-server-url=${your_oidc_provider_url}
quarkus.oidc.token.binding.certificate=true
quarkus.oidc.tls.tls-configuration-name=oidc-client-tls
quarkus.tls.oidc-client-tls.key-store.p12.path=target/certificates/oidc-client-keystore.p12
quarkus.tls.oidc-client-tls.key-store.p12.password=password
quarkus.tls.oidc-client-tls.trust-store.p12.path=target/certificates/oidc-client-truststore.p12
quarkus.tls.oidc-client-tls.trust-store.p12.password=password
quarkus.http.tls-configuration-name=oidc-server-mtls
quarkus.tls.oidc-server-mtls.key-store.p12.path=target/certificates/oidc-keystore.p12
quarkus.tls.oidc-server-mtls.key-store.p12.password=password
quarkus.tls.oidc-server-mtls.trust-store.p12.path=target/certificates/oidc-server-truststore.p12
quarkus.tls.oidc-server-mtls.trust-store.p12.password=password
上記の設定を使用すると、OIDC ベアラートークンをクライアント証明書にバインドすることが必須にできます。
次に、mTLS と OIDC ベアラーセキュリティーアイデンティティーの両方にアクセスする必要がある場合は、quarkus.http.auth.inclusive=true を使用して 包括的認証 を有効にすることを検討してください。
次のようにして、MTLS と OIDC の両方のセキュリティーアイデンティティーにアクセスできるようになりました。
package io.quarkus.it.oidc;
import jakarta.inject.Inject;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import org.eclipse.microprofile.jwt.JsonWebToken;
import io.quarkus.security.Authenticated;
import io.quarkus.security.credential.CertificateCredential;
import io.quarkus.security.identity.SecurityIdentity;
@Path("/service")
@Authenticated
public class OidcMtlsEndpoint {
@Inject
SecurityIdentity mtlsIdentity;
@Inject
JsonWebToken oidcAccessToken;
@GET
public String getIdentities() {
var cred = identity.getCredential(CertificateCredential.class).getCertificate();
return "Identities: " + cred.getSubjectX500Principal().getName().split(",")[0]
+ ", " + accessToken.getName();
}
}