没有 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

spring boot框架的web.xml文件怎么配置

Spring Boot os.web.servlet.pagenotfound

Spring boot - 无法解析jsp视图