网站首页 > 技术教程 正文
最近经常有小伙伴问我关于在微服务中使用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>
- 这里不得不吐槽下Spring Cloud的版本号,之前名字采用了伦敦地铁站的名字,根据字母表的顺序来对应版本时间顺序,后来又改成了年份,现在又添加了之前废弃的地铁站名字作为别名,真是让人迷惑;
- SpringBoot 2.7.0版本中使用Maven插件需要添加版本号;
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
</plugin>
- 最新版本的Spring Cloud已经放弃使用Ribbon来做负载均衡了,转而使用LoadBalancer,所以网关服务micro-oauth2-gateway中还需添加LoadBalancer依赖;
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
- 如果不添加LoadBalancer依赖,从网关调用任意服务会返回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>
- 下载Nacos 2.1.0版本,下载地址:https://github.com/alibaba/nacos/releases
- 下载完成后解压到指定目录即可,使用如下命令启动Nacos;
startup.cmd -m standalone
- 访问Nacos控制台,使用账号密码nacos:nacos进行登录,访问地址:http://localhost:8848/nacos/
使用
本文仅作为微服务权限终极解决方案,Spring Cloud Gateway + Oauth2 实现统一认证和鉴权! 升级版本的补充,具体代码实现可以参考该文,下面演示下该解决方案中的统一认证和鉴权功能。
- 首先需要启动Nacos和Redis服务,然后依次启动micro-oauth2-auth、micro-oauth2-gateway及micro-oauth2-api服务,启动完成后Nacos服务列表显示如下;
- 使用密码模式获取JWT令牌,访问地址:http://localhost:9201/auth/oauth/token
- 不带JWT令牌访问受保护的API接口,访问地址:http://localhost:9201/api/hello
- 带JWT令牌访问受保护的API接口,注意请求头Authorization添加Bearer前缀,可以正常访问;
- 使用获取到的JWT令牌访问获取当前登录用户信息的接口,访问地址:http://localhost:9201/api/user/currentUser
- 当JWT令牌过期时,使用接口返回的refreshToken获取新的JWT令牌,访问地址:http://localhost:9201/auth/oauth/token
- 使用没有访问权限的andy:123456账号登录,访问接口时会返回如下信息,访问地址:http://localhost:9201/api/hello
总结
在微服务系统中实现权限功能时,我们不应该把重复的权限校验功能集成到每个独立的API服务中去,而应该在网关做统一处理,然后通过认证中心去统一认证,这样才是优雅微服务权限解决方案!
项目源码地址
https://github.com/macrozheng/springcloud-learning/tree/master/micro-oauth2
来源:https://mp.weixin.qq.com/s/x7yc0B_yW9PEm_Dk5XiiuQ
猜你喜欢
- 2024-10-26 你的密码安全吗?用这些方法来检查一下吧
- 2024-10-26 Windows 10新版发布:QQ歇菜了(qqforwindows10怎么用)
- 2024-10-26 物联网数据接入篇-应用层协议一(4)
- 2024-10-26 产品经理懂点技术:什么是https,与http有什么区别
- 2024-10-26 森系可人qq昵称女生英文简洁(森系可爱英文名女孩)
- 2024-10-26 Win11下载图标变黑怎么办?Win11下载软件图标变黑的解决方法
- 2024-10-26 Spring Security团队正式宣布Spring Security OAuth终止维护
- 2024-10-26 Cloud Gateway + Security OAuth2 + JWT实现微服务统一认证授权鉴权
- 2024-10-26 手机短信登录、邮箱登录、QQ 登录都想要,咋办?
- 2024-10-26 妹子始终没搞懂OAuth2.0,今天整合Spring Cloud Security 说明白
你 发表评论:
欢迎- 最近发表
-
- Win11学院:如何在Windows 11上使用WSL安装Ubuntu
- linux移植(Linux移植freemodbus)
- 独家解读:Win10预览版9879为何无法识别硬盘
- 基于Linux系统的本地Yum源搭建与配置(ISO方式、RPM方式)
- Docker镜像瘦身(docker 减小镜像大小)
- 在linux上安装ollama(linux安装locale)
- 渗透测试系统Kali推出Docker镜像(kali linux渗透测试技术详解pdf)
- Linux环境中部署Harbor私有镜像仓库
- linux之间传文件命令之Rsync傻瓜式教程
- 解决ollama在linux中安装或升级时,通过国内镜像缩短安装时长
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
本文暂时没有评论,来添加一个吧(●'◡'●)