Spring Cloud Gateway 整合 OAuth2.0 实现分布式统一认证授权⑤

love374
发布于 2022-7-11 11:45
浏览
0收藏

 

订单微服务搭建
由于在网关层面已经做了鉴权了(细化到每个URI),因此微服务就不用集成Spring Security单独做权限控制了。

因此这里的微服务也是相对比较简单了,只需要将网关层传递的加密用户信息解密出来,放入到Request中,这样微服务就能随时获取到用户的信息了。

新建一个oauth2-cloud-order-service模块,目录如下:

  Spring Cloud Gateway 整合 OAuth2.0 实现分布式统一认证授权⑤-鸿蒙开发者社区
新建一个过滤器AuthenticationFilter,用于解密网关传递的用户数据,代码如下:

 Spring Cloud Gateway 整合 OAuth2.0 实现分布式统一认证授权⑤-鸿蒙开发者社区
新建两个接口,返回当前登录的用户信息,如下:

 Spring Cloud Gateway 整合 OAuth2.0 实现分布式统一认证授权⑤-鸿蒙开发者社区
注意:以上两个接口所需要的权限已经放入到了Redis中,权限如下:

  • /order/login/info:ROLE_admin和ROLE_user都能访问
  • /order/login/admin:ROLE_admin权限才能访问
     Spring Cloud Gateway 整合 OAuth2.0 实现分布式统一认证授权⑤-鸿蒙开发者社区
    “案例源码已经上传GitHub,关注公众号:码猿技术专栏,回复关键词:9529 获取!”

 

为什么要将URI和权限放入Redis?
在网关的鉴权管理器那里是直接从Redis中获取URI对应的权限,然后和令牌中的权限比较,为什么要这样做?

这也是目前企业中比较常用的一种方式,将鉴权完全放在了网关层面,也实现了动态权限校验。当然有些是直接将接口的权限控制在每个微服务中。

“采用陈某的这种方案需要另外维护URI和权限的对应关系,当然这种难度很低,便于实现。”


只是一种方案,具体是否选用还要考虑到架构层面。

测试
同时启动上述三个服务,如下:

 Spring Cloud Gateway 整合 OAuth2.0 实现分布式统一认证授权⑤-鸿蒙开发者社区
1、用密码模式登录user,获取令牌,如下:

 Spring Cloud Gateway 整合 OAuth2.0 实现分布式统一认证授权⑤-鸿蒙开发者社区
2、使用user用户的令牌访问/order/login/info接口,如下:

 Spring Cloud Gateway 整合 OAuth2.0 实现分布式统一认证授权⑤-鸿蒙开发者社区
可以看到成功返回了,因为具备ROLE_user权限。

3、使用user用户的令牌访问/order/login/admin接口,如下:

 Spring Cloud Gateway 整合 OAuth2.0 实现分布式统一认证授权⑤-鸿蒙开发者社区
可以看到直接返回了无权限访问,直接在网关层被拦截了。

 

总结
本篇文章只是简单的整合了网关+OAuth2.0,实际开发中还有一些细节待完善,由于文章篇幅限制,后续介绍......

 

文章转自公众号:码猿技术专栏

已于2022-7-11 11:45:35修改
收藏
回复
举报
回复
    相关推荐