从Spring Security OAuth说起,Spring Security OAuth实现了OAuth2协议中的授权服务器(Authorization Server)、资源服务器(Resource Server)和客户端(Clients)。Spring 还是挺好的,但是随着OAuth协议的不断发展而Spring Security OAuth2官方已经开始废弃。官网的声明如下:
Deprecation Notice
The Spring Security OAuth project is deprecated. The latest OAuth 2.0 support is provided by Spring Security. See the OAuth 2.0 Migration Guide for further details.
OAuth 2.0迁移指南
官方迁移指南中说到OAuth 2.0客户端和资源服务器从Spring Security OAuth 2.x迁移到Spring Security 5.2.x。Spring Security不提供Authorization Server支持。更多详细的细节以指南为准。
授权服务器技术选型
- 使用Spring Security OAuth低版本的实现:存在与OAuth2协议更新不匹配,不使用新特新的话仅基于RBAC(Role-based access control)还是能够满足。
- keycloak:是 RedHat 公司出品。是一个致力于解决应用和服务身份验证与访问管理的开源工具。可以通过简单的配置达到保护应用和服务的目的。它提供了身份和访问管理的有用功能:单点登录(SSO),身份代理和第三方登录。支持 OpenID Connect,OAuth 2.0 和 SAML 2.0 等标准协议。用户集中管理。客户端适配器,轻松保护应用程序和服务。可视化管理控制台和帐户管理控制台。可扩展性、高性能、快速实现落地。文档比较完毕,而且是一个成熟的、免费的商业级产品。
Spring Security OAuth实现授权服务器
具体实现就不多说了参看我的github代码,使用的是JwtTokenStore存储access token的。实现了从数据库存获取client信息的ClientDetailsService和从数据库获取用户角色和权限的UserDetailsService,提供jwk-set-uri,具体实现可以看代码。
Spring Cloud OAuth2 authorization server 实现源码在gihub上,确保nacos和mysql数据库启动即可。
资源服务器
使用Spring Security 5.2.x来实现的。
必须依赖spring-boot-starter-security和spring-boot-starter-oauth2-resource-server
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId