Saml 2.0 Metadata
Spring Security 可以 parse asserting party metadata 产生 AssertingPartyDetails 实例以及从 RelyingPartyRegistration 实例 publish relying party metadata。
Parsing <saml2:IDPSSODescriptor> metadata
您可以解析声明方元数据 using 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();
Producing <saml2:SPSSODescriptor> Metadata
您可以使用下面的 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"
}
Changing the Way a RelyingPartyRegistration Is Looked Up
如果您有其他策略来识别要使用的 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
}