OpenSAML 支持
Spring Security 提供了一个用于实现 SAML 2.0 功能的 API,同时它也使用 OpenSAML 提供了一个默认实现。
因为 Spring Security 同时支持多个版本的 OpenSAML,所以组件使用以下命名约定:
-
任何在所有支持的版本中都可使用的组件被命名为
OpenSamlXXX
。 -
任何针对 OpenSAML 4.x 的组件被命名为
OpenSaml4XXX
-
任何针对 OpenSAML 5.x 的组件被命名为
OpenSaml5XXX
spring-security-config
默认会通过发现您的应用程序当前使用的版本来在这两个实现之间进行选择。例如,如果您使用的是 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-api
和 opensaml-core-impl