最近经常有小伙伴问我关于在微服务中使用Oauth2的问题,其实之前已经写过一篇相关文章了。这次抽空把之前文章中的Demo给升级了,支持了最新版的Spring Cloud和Nacos。今天再来介绍下这套微服务权限终极解决方案,希望对大家有所帮助!
首先还是来聊聊这套解决方案的实现思路,我们理想的解决方案应该是这样的,认证服务负责统一认证,网关服务负责校验认证和鉴权,其他API服务则负责处理自己的业务逻辑。安全相关的逻辑只存在于认证服务和网关服务中,其他服务只是单纯地提供服务而没有任何安全相关逻辑。
这套解决方案中相关服务的划分如下:
micro-oauth2-gateway
:网关服务,负责请求转发和鉴权功能,整合Spring Security+Oauth2;micro-oauth2-auth
:认证服务,负责对登录用户进行认证,整合Spring Security+Oauth2;micro-oauth2-api
:API服务,受网关服务的保护,用户鉴权通过后可以访问该服务,不整合Spring Security+Oauth2。SpringBoot 2.7.0
和最新版的Spring Cloud;<properties>
<spring-boot.version>2.7.0</spring-boot.version>
<spring-cloud.version>2021.0.3</spring-cloud.version>
<spring-cloud-alibaba.version>2021.0.1.0</spring-cloud-alibaba.version>
</properties>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
</plugin>
micro-oauth2-gateway
中还需添加LoadBalancer依赖;<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
Service Unavailable
错误信息;{
"timestamp": "2022-06-28T02:36:31.680+00:00",
"path": "/auth/oauth/token",
"status": 503,
"error": "Service Unavailable",
"requestId": "c480cefa-1"
}
micro-oauth2-auth
认证服务需要升级版本,注意使用的JWT库也要同步升级;<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-oauth2</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>com.nimbusds</groupId>
<artifactId>nimbus-jose-jwt</artifactId>
<version>9.23</version>
</dependency>
</dependencies>
startup.cmd -m standalone
nacos:nacos
进行登录,访问地址:http://localhost:8848/nacos/本文仅作为微服务权限终极解决方案,Spring Cloud Gateway + Oauth2 实现统一认证和鉴权! 升级版本的补充,具体代码实现可以参考该文,下面演示下该解决方案中的统一认证和鉴权功能。
micro-oauth2-auth
、micro-oauth2-gateway
及micro-oauth2-api
服务,启动完成后Nacos服务列表显示如下;Authorization
添加Bearer
前缀,可以正常访问;refreshToken
获取新的JWT令牌,访问地址:http://localhost:9201/auth/oauth/tokenandy:123456
账号登录,访问接口时会返回如下信息,访问地址:http://localhost:9201/api/hello在微服务系统中实现权限功能时,我们不应该把重复的权限校验功能集成到每个独立的API服务中去,而应该在网关做统一处理,然后通过认证中心去统一认证,这样才是优雅微服务权限解决方案!
https://github.com/macrozheng/springcloud-learning/tree/master/micro-oauth2
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有