Spring Security 可以解析断言方元数据以生成实例,以及从实例发布信赖方元数据AssertingPartyDetailsRelyingPartyRegistrationSpring中文文档

解析元数据<saml2:IDPSSODescriptor>

使用 OpenSAML 供应商支持时,生成的类型为 。 这意味着您可以通过执行以下操作来获取底层 OpenSAML XMLObject:AssertingPartyDetailsOpenSamlAssertingPartyDetailsSpring中文文档

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

生成元数据<saml2:SPSSODescriptor>

可以使用 DSL 方法发布元数据终结点,如下所示:saml2MetadataSpring中文文档

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

可以使用此元数据终结点将信赖方注册到断言方。 这通常就像查找正确的表单字段以提供元数据终结点一样简单。Spring中文文档

默认情况下,元数据端点为 ,但它也响应 和 。/saml2/metadata/saml2/metadata/{registrationId}/saml2/service-provider-metadata/{registrationId}Spring中文文档

可以通过调用 DSL 中的方法来更改此设置:metadataUrlSpring中文文档

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

更改查找 A 的方式RelyingPartyRegistration

如果您有不同的策略来确定要使用的策略,您可以配置自己的策略,如下所示:RelyingPartyRegistrationSaml2MetadataResponseResolverSpring中文文档

@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
}