You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Security SAML2 v6.4.1如何在元数据生成指定签名属性

问题

我开发的应用需集成不受控的现有SSO。此前使用Spring Boot 2.1.2.RELEASE及spring-security-saml2-core 1.0.10.RELEASE等依赖,生成的依赖方元数据中<md:SPSSODescriptor>包含AuthnRequestsSigned="true"和WantAssertionsSigned="true"属性。现升级至Spring Boot 3.4.0-M3、Spring Security SAML2 v6.4.0-M4等版本,按官方文档配置SecurityConfig及application.yml后,元数据中上述属性消失,请问如何配置才能重新生成这两个属性?

此前依赖配置

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.2.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>
<dependency>
    <groupId>org.springframework.security.extensions</groupId>
    <artifactId>spring-security-saml2-core</artifactId>
    <version>1.0.10.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.security.extensions</groupId>
    <artifactId>spring-security-saml-dsl-core</artifactId>
    <version>1.0.5.RELEASE</version>
</dependency>

升级后版本

<spring-boot.version> 3.4.0-M3
<spring-security-saml2-core.version> 2.0.0.M31
<spring-security-saml-dsl-core.version> 1.0.5.RELEASE
<spring-security-saml2-service-provider.version> 6.4.0-M4

当前SecurityConfig

@Configuration
@EnableWebSecurity
@EnableMethodSecurity(securedEnabled = true)
public class SecurityConfig{
    private static final String SAML_METADATA = "/saml/metadata";

    @Autowired
    PmaLdapValidationHandler pmaLdapValidationHandler;

    @Bean
    SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {

        // @formatter:off
        http
            .saml2Metadata((saml2) -> saml2.metadataUrl(SAML_METADATA))
            .saml2Login(withDefaults()).saml2Logout(withDefaults())
            .logout(withDefaults())
            .authorizeHttpRequests((authorize) -> authorize.anyRequest().authenticated());
        // @formatter:on
        return http.build();
    }
}

当前application.yml

logging.level.org.springframework.security: DEBUG
logging.level.org.springframework.security.saml2: DEBUG

spring:
  mvc:
    view:
      prefix: /templates/
      suffix: .pug
    static-path-pattern: /static/**

  security:
    saml2:
      relyingparty:
        registration:
          pma_web:
            entity-id: "${sso.entity-id}"
            signing:
              credentials:
                - private-key-location: classpath:saml/credentials/rp-private.key
                  certificate-location: classpath:saml/credentials/rp-certificate.crt
            singlelogout:
              binding: POST
              url: "{baseUrl}/logout/saml2/slo"
            assertingparty:
              metadata-uri: classpath:saml/${env}/metadata.xml

  datasource:
    jndi-name: java:jboss/datasources/pma_web
  jpa:
    hibernate:
      ddl-auto: update
    properties:
      hibernate:
        dialect: org.hibernate.dialect.PostgreSQLDialect

pma-cmdb:
  pma-keystore-key-alias: pma-jwt-signing-key
  pma-keystore-password: pma-jwt-p422w0rd

解决方案

要在Spring Security 6.x的SAML2元数据中恢复AuthnRequestsSigned="true"和WantAssertionsSigned="true"属性,需完成以下配置:

1. 启用认证请求签名(对应AuthnRequestsSigned="true")

在application.yml的SAML2依赖方配置中,添加开启认证请求签名的配置项:

spring:
  security:
    saml2:
      relyingparty:
        registration:
          pma_web:
            # 保留原有配置
            authentication-requests-signing-enabled: true

也可通过Java代码配置实现:

http.saml2Login(saml2 -> saml2
        .authenticationRequestResolver(resolver -> 
                resolver.setSignRequest(true)));

2. 要求断言签名(对应WantAssertionsSigned="true")

在断言方配置中添加要求断言必须签名的配置:

spring:
  security:
    saml2:
      relyingparty:
        registration:
          pma_web:
            # 保留原有配置
            assertingparty:
              # 保留原有配置
              want-assertions-signed: true

Java代码配置方式:

http.saml2Login(saml2 -> saml2
        .metadata(metadata -> metadata
                .assertingPartyDetails(details -> 
                        details.wantAssertionsSigned(true))));

3. 验证配置效果

完成配置后,访问元数据端点/saml/metadata,检查<md:SPSSODescriptor>标签是否已包含目标属性。注意:需确保签名凭证(私钥和证书)已正确配置,此为签名功能生效的前提,现有配置中已包含该部分内容,无需额外修改。


内容的提问来源于stack exchange,提问作者Francisco M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 19:04:53