OpenSAML 支持

Spring Security 提供了用于实现 SAML 2.0 特性的 API,同时也提供了使用 OpenSAML 的默认实现。

由于 Spring Security 同时支持多个版本的 OpenSAML,因此组件使用了以下命名约定

  • 可用于所有支持版本的任何组件命名为 OpenSamlXXX

  • 针对 OpenSAML 4.x 的任何组件命名为 OpenSaml4XXX

  • 针对 OpenSAML 5.x 的任何组件命名为 OpenSaml5XXX

spring-security-config 默认通过检测您的应用当前使用的 OpenSAML 版本来选择相应的实现。例如,如果您使用 OpenSAML 4,Spring Security 将使用 OpenSaml4XXX 组件。

选择 OpenSAML 4

Spring Security 默认依赖于 OpenSAML 4,因此除了导入 spring-security-saml 依赖外,您无需做任何事情即可开始使用它。

选择 OpenSAML 5

要使用 OpenSAML,您应按如下方式覆盖 opensaml 依赖项

  • Maven

  • Gradle

<dependencies>
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-saml2-service-provider</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.opensaml</groupId>
                <artifactId>*</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.opensaml</groupId>
        <artifactId>opensaml-saml-api</artifactId>
        <version>5.1.2</version>
    </dependency>
    <dependency>
        <groupId>org.opensaml</groupId>
        <artifactId>opensaml-saml-impl</artifactId>
        <version>5.1.2</version>
    </dependency>
</dependencies>
dependencies {
    constraints {
        implementation "org.opensaml:opensaml-core-api:5.1.2"
        implementation "org.opensaml:opensaml-core-impl:5.1.2"
        implementation "org.opensaml:opensaml-saml-api:5.1.2"
        implementation "org.opensaml:opensaml-saml-impl:5.1.2"
    }

    // ...

    implementation ('org.springframework.security:spring-security-saml2-service-provider') {
        exclude group: "org.opensaml", module: "opensaml-core"
    }

    // ...
}
进行排除是必要的,因为 OpenSAML 5 将 opensaml-core 分成了 opensaml-core-apiopensaml-core-impl