最新の安定バージョンについては、Spring Security 6.4.2 を使用してください!

Saml 2.0 メタデータ

Spring Security は、アサーティングパーティのメタデータを解析して AssertingPartyDetails インスタンスを生成したり、RelyingPartyRegistration インスタンスから証明書利用者のメタデータを公開したりできます。

<saml2:IDPSSODescriptor> メタデータの解析

RelyingPartyRegistrations を使用して、アサーティングパーティのメタデータを解析できます。

OpenSAML ベンダーサポートを使用する場合、結果の AssertingPartyDetails は型 OpenSamlAssertingPartyDetails になります。これは、以下を実行することで、基礎となる OpenSAML XMLObject を取得できることを意味します。

  • Java

  • Kotlin

OpenSamlAssertingPartyDetails details = (OpenSamlAssertingPartyDetails)
        registration.getAssertingPartyDetails();
EntityDescriptor openSamlEntityDescriptor = details.getEntityDescriptor();
val details: OpenSamlAssertingPartyDetails =
        registration.getAssertingPartyDetails() as OpenSamlAssertingPartyDetails;
val openSamlEntityDescriptor: EntityDescriptor = details.getEntityDescriptor();

<saml2:SPSSODescriptor> メタデータの作成

以下に示すように、saml2Metadata DSL メソッドを使用してメタデータエンドポイントを公開できます。

  • Java

  • Kotlin

http
    // ...
    .saml2Login(withDefaults())
    .saml2Metadata(withDefaults());
http {
    //...
    saml2Login { }
    saml2Metadata { }
}

このメタデータエンドポイントを使用して、依存パーティをアサーティングパーティに登録できます。これは、メタデータエンドポイントを提供するための正しいフォームフィールドを見つけるのと同じくらい簡単です。

デフォルトでは、メタデータエンドポイントは /saml2/metadata ですが、/saml2/metadata/{registrationId} および /saml2/service-provider-metadata/{registrationId} にも応答します。

これは、DSL で metadataUrl メソッドを呼び出すことで変更できます。

  • Java

  • Kotlin

.saml2Metadata((saml2) -> saml2.metadataUrl("/saml/metadata"))
saml2Metadata {
	metadataUrl = "/saml/metadata"
}

RelyingPartyRegistration のルックアップ方法の変更

使用する RelyingPartyRegistration を特定する別の方法がある場合は、以下のように独自の Saml2MetadataResponseResolver を構成できます。

  • Java

  • Kotlin

@Bean
Saml2MetadataResponseResolver metadataResponseResolver(RelyingPartyRegistrationRepository registrations) {
	RequestMatcherMetadataResponseResolver metadata = new RequestMatcherMetadataResponseResolver(
			(id) -> registrations.findByRegistrationId("relying-party"));
	metadata.setMetadataFilename("metadata.xml");
	return metadata;
}
@Bean
fun metadataResponseResolver(val registrations: RelyingPartyRegistrationRepository): Saml2MetadataResponseResolver {
    val metadata = new RequestMatcherMetadataResponseResolver(
			id: String -> registrations.findByRegistrationId("relying-party"))
	metadata.setMetadataFilename("metadata.xml")
	return metadata
}