spring-boot-starter-oauth2-client、spring-cloud-starter-oauth2 和 spring-security-oauth2 之间有什么区别

What is the difference between spring-boot-starter-oauth2-client, spring-cloud-starter-oauth2 and spring-security-oauth2

我正在为 OAUTH2 中的 client_credentials 授权类型流程开发客户端应用程序。

我无法决定在我的项目中出于以下目的使用哪个依赖项。

  1. spring-boot-starter-oauth2-client
  2. spring-cloud-starter-oauth2
  3. spring-security-oauth2

我从 spring 项目中引用了此 documentation,其中在客户支持部分下有一个 table 描述了可用的选项。但是我无法理解哪一列指的是上述依赖项中的哪一个。

我想配置一个 WebClientRestTemplate,它在访问资源服务器之前自动从身份验证服务器检索 OAUTH2 令牌。

请指导我为我的项目选择正确的工件。

如果您正在使用 Spring 引导,您应该选择 org.springframework.boot:spring-boot-starter-oauth2-client
这包括 Spring Security 的 OAuth 2.0 客户端支持并提供 Spring 引导 auto-configuration 以设置 OAuth2/Open ID Connect 客户端。
您可以在 Spring Boot reference documentation.
中阅读有关如何配置客户端的信息 您还可以在 Spring 安全性 reference documentation.

中找到更多详细信息

如果您没有使用 Spring 启动,那么您应该选择 org.springframework.security:spring-security-oauth2-client。这也提供了 Spring Security 最新的 OAuth 2.0 Client 支持,但不包括 Spring Boot auto-configuration.
对应的文档也是Spring安全reference documentation.

不应使用您提到的第三个依赖项 org.springframework.security.oauth:spring-security-oauth2,因为它是 legacy Spring Security OAuth 项目的一部分,该项目现已弃用。
该库提供的功能现已移至 Spring 安全性。
这就是 Migration Guide 所描述的,从旧项目迁移到最新的 Spring 安全支持。

此时您不应使用 org.springframework.cloud:spring-cloud-starter-oauth2,因为它依赖于旧版 OAuth 支持。
随着 Spring 云团队更新到最新的 Spring 安全支持,这在未来可能会发生变化。