Spring Security OAuth停更了?探索官方进化版Spring Authorization Server的革新之处!

1、背景

Spring Security OAuth(spring-security-oauth2)停更

主要意思是:生命周期终止通知 Spring Security OAuth(spring-security-oauth2)项目已达到生命周期结束,不再由VMware,Inc.积极维护。 此项目已被Spring Security和Spring Authorization Server提供的OAuth2支持所取代。

那么我们来分析一下这两个项目。Spring Authorization Server是Spring Security OAuth的进化版本,Spring Security OAuth官方已经宣布“End of Life”了。Spring Security OAuth使用的是OAuth2.0标准而Spring Authorization Serve引入了对OAuth 2.1和OpenID Connect 1.0规范的支持,并提供了更多功能和改进。它提供了OAuth 2.1和OpenID Connect 1.0规范以及其他相关规范的实现。它是基于Spring Security构建的,为构建OpenID Connect 1.0身份提供者和OAuth2授权服务器产品提供了安全、轻量级和可定制的基础。

OAuth 2.1和OpenID Connect 1.0是用于身份验证和授权的行业标准协议。它们被广泛应用于各种应用程序和系统,以实现安全的用户身份验证和授权流程。Spring Authorization Server提供了一个方便的方式来实现这些协议,使开发人员能够快速构建安全可靠的身份验证和授权系统。

2、区别

2.1、协议区别

  • Spring Security OAuth

Spring Security OAuth(spring-security-oauth2)是一个基于Spring Security的扩展,用于提供OAuth(开放授权)协议的实现。它提供了OAuth 2.0的客户端和服务端支持,使开发人员可以轻松地将OAuth集成到他们的应用程序中。

https://spring.io/projects/spring-security-oauth

  • Spring Authorization Server

Spring Authorization Server(spring-authorization-server)是一个框架,提供OAuth 2.1和OpenID Connect 1.0规范以及其他相关规范的实现。它构建在Spring Security之上,为构建OpenID Connect 1.0 Identity Providers和OAuth2 Authorization Server产品提供了一个安全,轻量级和可定制的基础。

https://spring.io/projects/spring-authorization-server​spring.io/projects/spring-authorization-server

补充知识点一:OAuth 2.0和OAuth 2.1区别

OAuth 2.0和OAuth 2.1是OAuth协议的两个不同版本,它们在以下方面有一些区别:

  1. 版本号:OAuth 2.0是最早发布的版本,而OAuth 2.1是OAuth 2.0的后续版本。
  2. RFC规范:OAuth 2.0的规范定义在RFC 6749中,而OAuth 2.1的规范定义在RFC 8628中。OAuth 2.1是对OAuth 2.0规范的细化和改进。
  3. 安全性增强:OAuth 2.1在安全性方面引入了一些增强功能,以强化协议的安全性。这些增强功能包括:禁止使用基于浏览器的应用程序进行授权码授权流程(Authorization Code Flow with Proof Key for Code Exchange, PKCE),推荐使用强密码散列算法等。
  4. 便捷性:OAuth 2.1的目标之一是简化开发者对OAuth 2.0的实现和使用。它提供了更具可读性和易用性的规范,以减少实现和使用过程中的困惑和错误。
  5. 向后兼容性:OAuth 2.1被设计为向后兼容OAuth 2.0,这意味着现有的OAuth 2.0应用程序可以平滑地迁移到OAuth 2.1,而无需进行重大的更改。

需要注意的是,OAuth 2.1并非OAuth协议的完全新版本,而是在OAuth 2.0基础上的改进和细化。它旨在提供更好的安全性和便捷性,并解决了一些在OAuth 2.0中发现的问题。

在实际应用中,您应该根据具体需求和支持情况选择OAuth的版本。对于新的项目,建议考虑使用OAuth 2.1,以获得更好的安全性和简化的开发体验。对于现有的OAuth 2.0应用程序,可以考虑逐步迁移到OAuth 2.1以利用其优势和增强功能。

补充知识点二:OpenID Connect 1.0

OpenID Connect 1.0 是建立在 OAuth 2.0 协议之上的身份验证协议,它扩展了 OAuth 2.0 的功能,为客户端应用程序提供了更丰富的用户身份验证和属性信息获取能力。以下是 OpenID Connect 1.0 与 OAuth 2.0 的一些区别:

  1. 身份验证层:OAuth 2.0 主要关注授权方面,而 OpenID Connect 1.0 在 OAuth 2.0 的基础上添加了一个身份验证层,使得客户端应用程序可以直接获取用户的身份信息。
  2. ID Token:OpenID Connect 1.0 引入了 ID Token 的概念,它是一个基于 JSON Web Token (JWT) 的数据结构,用于传递有关用户身份的信息。ID Token 包含有关用户的基本配置信息,如用户标识符、姓名、电子邮件地址等。OAuth 2.0 不包含类似的标准化方式来传递用户身份信息。
  3. 用户信息端点:OpenID Connect 1.0 定义了一个用户信息端点,客户端应用程序可以使用该端点来获取用户的详细配置信息。OAuth 2.0 并没有定义类似的端点。
  4. 标准化:OpenID Connect 1.0 是一项标准化的协议,规范了身份验证和用户信息获取的流程和数据格式。它定义了一组规范和约定,使得不同的身份提供商和客户端应用程序可以在遵循同样的标准下进行集成。OAuth 2.0 虽然也是一个标准化协议,但它主要关注授权方面,没有像 OpenID Connect 1.0 那样具体定义身份验证和用户信息获取的流程。

综上所述,OpenID Connect 1.0 是在 OAuth 2.0 的基础上增加了身份验证层和用户信息获取功能的协议。它通过引入 ID Token 和用户信息端点等机制,为客户端应用程序提供了更丰富的用户身份验证和属性信息获取能力。

2.2、认证模式区别

  • Spring Security OAuth

1)授权码模式:authorization_code

2)简化模式:implicit

3)客户端模式:client_credentials

4)密码模式:password

  • Spring Authorization Server

可以看到spring authorization server中password模式已经标记为过时了。另外多了jwt-bearer和device_code模式。

authorizationGrantTypes:客户端可以使用的授权授予类型。支持的值包括authorization_code、client_credentials、refresh_token和urn:ietf:params:oauth:grant-type:device_code。

密码模式已经被标记为过时了,官方推荐使用 JWT-Bearer Token 或 Device Code Flow 模式。

JWT-Bearer Token 模式是一种基于 JSON Web Token(JWT)的认证方式,客户端向服务器发送一个包含用户身份信息的 JWT Token,服务器通过验证该 Token 来确认用户的身份。这种模式的优点是简单易用、安全性高、跨平台性强。

Device Code Flow 模式则是一种基于移动设备的认证方式,客户端向服务器发送一个请求,要求获取一个一次性的访问码(Device Code),并在移动设备上完成该码的输入以完成身份验证。这种模式的优点是安全性高、易于集成和使用。

如果您正在使用 Spring Security 并且需要更改认证方式,请考虑使用 JWT-Bearer Token 或 Device Code Flow 模式。

https://github.com/spring-projects/spring-security/wiki/OAuth-2.0-Features-Matrix​github.com/spring-projects/spring-security/wiki/OAuth-2.0-Features-Matrix

========================================

如果文章对你有帮助,请不要忘记加个关注、点个赞!

猜你喜欢

转载自blog.csdn.net/citywu123/article/details/131080947