Saml 2.0 Metadata

本站(springdoc.cn)中的内容来源于 spring.io ,原始版权归属于 spring.io。由 springdoc.cn 进行翻译,整理。可供个人学习、研究,未经许可,不得进行任何转载、商用或与之相关的行为。 商标声明:Spring 是 Pivotal Software, Inc. 在美国以及其他国家的商标。

Spring Security 可以 解析断言方元数据 以生成 AssertingPartyDetails 实例,也可以从 RelyingPartyRegistration 实例中 发布依赖方元数据

解析 <saml2:IDPSSODescriptor> metadata

你可以使用 RelyingPartyRegistrations 解析断言方的元数据。

当使用 OpenSAML vendor 支持时,生成的 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> 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"
}

改变 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
}