Spring Cloud Gateway 整合 OAuth2.0 实现分布式统一认证授权⑤
订单微服务搭建
由于在网关层面已经做了鉴权了(细化到每个URI),因此微服务就不用集成Spring Security单独做权限控制了。
因此这里的微服务也是相对比较简单了,只需要将网关层传递的加密用户信息解密出来,放入到Request中,这样微服务就能随时获取到用户的信息了。
新建一个oauth2-cloud-order-service模块,目录如下:
新建一个过滤器AuthenticationFilter,用于解密网关传递的用户数据,代码如下:
新建两个接口,返回当前登录的用户信息,如下:
注意:以上两个接口所需要的权限已经放入到了Redis中,权限如下:
- /order/login/info:ROLE_admin和ROLE_user都能访问
- /order/login/admin:ROLE_admin权限才能访问
“案例源码已经上传GitHub,关注公众号:码猿技术专栏,回复关键词:9529 获取!”
为什么要将URI和权限放入Redis?
在网关的鉴权管理器那里是直接从Redis中获取URI对应的权限,然后和令牌中的权限比较,为什么要这样做?
这也是目前企业中比较常用的一种方式,将鉴权完全放在了网关层面,也实现了动态权限校验。当然有些是直接将接口的权限控制在每个微服务中。
“采用陈某的这种方案需要另外维护URI和权限的对应关系,当然这种难度很低,便于实现。”
只是一种方案,具体是否选用还要考虑到架构层面。
测试
同时启动上述三个服务,如下:
1、用密码模式登录user,获取令牌,如下:
2、使用user用户的令牌访问/order/login/info接口,如下:
可以看到成功返回了,因为具备ROLE_user权限。
3、使用user用户的令牌访问/order/login/admin接口,如下:
可以看到直接返回了无权限访问,直接在网关层被拦截了。
总结
本篇文章只是简单的整合了网关+OAuth2.0,实际开发中还有一些细节待完善,由于文章篇幅限制,后续介绍......
文章转自公众号:码猿技术专栏