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