没有 Spring Boot 的 Spring Security SAML 身份元数据
Posted
技术标签:
【中文标题】没有 Spring Boot 的 Spring Security SAML 身份元数据【英文标题】:Spring Security SAML Identity Metadata WITHOUT Spring Boot 【发布时间】:2022-01-13 09:46:03 【问题描述】:我不断看到以下用于注册 SAML 身份提供者的代码块:
spring:
security:
saml2:
relyingparty:
registration:
adfs:
identityprovider:
entity-id: https://idp.example.com/issuer
verification.credentials:
- certificate-location: "classpath:idp.crt"
singlesignon.url: https://idp.example.com/issuer/sso
singlesignon.sign-request: false
但是,我有一个较旧的项目,我需要实现多个不是基于 Spring Boot 构建的 SAML 身份提供程序,并且转换它不是一种选择(如果我们今天开始同一个项目,当然我们会使用 Spring引导)。
上述代码如何转换为手动执行此操作?
【问题讨论】:
这可能是yaml形式的spring config,你是在找application.properties方面的等价配置吗? 您使用的是 SAML 扩展项目还是spring-security-saml2-service-provider
模块?
我使用的是spring-security-saml2-service-provider
,Spring Security 版本 5.6.0。
我没有使用 Spring Boot,所以无法通过 application.yaml 或 application.properties 进行自动配置。
【参考方案1】:
您可以通过公开RelyingPartyRegistrationRepository
类型的bean 来做到这一点:
@Value("$verification.key")
File verificationKey;
@Bean
public RelyingPartyRegistrationRepository relyingPartyRegistrations() throws Exception
X509Certificate certificate = X509Support.decodeCertificate(this.verificationKey);
Saml2X509Credential credential = Saml2X509Credential.verification(certificate);
RelyingPartyRegistration registration = RelyingPartyRegistration
.withRegistrationId("example")
.assertingPartyDetails(party -> party
.entityId("https://idp.example.com/issuer")
.singleSignOnServiceLocation("https://idp.example.com/SSO.saml2")
.wantAuthnRequestsSigned(false)
.verificationX509Credentials(c -> c.add(credential))
)
.build();
return new InMemoryRelyingPartyRegistrationRepository(registration);
您提到的 application.yml
属性只是从 Spring Boot 声明此 bean 的快捷方式。在 Spring Security 示例存储库中有一个 complete sample 没有使用 Spring Boot。
另外,还有一个entire section in Spring Security documentation 教授如何覆盖 Spring Boot 自动配置(我在上面的代码块中使用)。
【讨论】:
谢谢。在您发布之前几分钟,我刚刚找到了相同的链接。感谢您抽出宝贵时间为我提供帮助。 不用担心。您可以接受答案以便其他人参考吗?以上是关于没有 Spring Boot 的 Spring Security SAML 身份元数据的主要内容,如果未能解决你的问题,请参考以下文章
带有undertow servlet容器的spring-boot应用程序中的“没有共同的密码套件”错误
SpringBoot :Spring boot 中 Redis 的使用
springboot - SqlSessionFactoryBean falls in circular dependencies by Spring Boot's DataSourceIni