最新の安定バージョンについては、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
}