Spring Gateway+Spring security+Oauth2微服务权限认证中心解决方案学习

1,967 阅读2分钟

这篇文章主要是针对我最近学习的基于Spring security+Oauth2来解决权限认证功能,分别集成了Nacos、Gateway、Security、Oauth2、Redis这些组件来实现权限认证的微服务。

实现思路

主要是通过认证服务进行统一的认证,网关服务如何转发请求和校验认证、鉴权,其他API服务处理自己的逻辑,安全认证的逻辑只存在于Security和Gateway中。

这是Nacos中项目的配置文件,这里我用的Nacos版本是2.0.4

292B61AF-6F6E-4FD2-804F-B8D39D4479C3.png

服务方面主要分为:

  • auth-service:认证服务,主要是负责对于OAuth2 认证服务配置,分为定义授权和令牌端点以及令牌服务、配置令牌端点(Token Endpoint)的安全约束、配置客户端详情、集成了erp-common包里面的erp-common-security安全组件,自定义生成令牌这边给基于Redis实现,令牌保存到缓存。
  • erp-common:主要是通用模块封装的common包,主要是有core里面一些常量类定义、web层的通用处理,security安全认证一些配置,包括通过服务于服务之间通过Feign请求调用也需要token,剩下的就是一些log日志、swagger、mq集成的一些配置了,这里就不一一做介绍了。
<description>
    通用模块
</description>
<modules>
    <module>erp-common-core</module>
    <module>erp-common-security</module>
    <module>erp-common-redis</module>
    <module>erp-common-swagger</module>
    <module>erp-common-datascope</module>
    <module>erp-common-log</module>
    <module>erp-common-mq</module>
</modules>
  • gateway:网关服务,负责请求转发和鉴权,整合Spring Security+Oauth2,引入sentinel来做链监控;

说明一下:我这里的Nacos、Redis服务都是部署在Docker上面的,因为项目中也引入了sentine和rabbitmq所以启动docker容器的时候都要进行启动。

9CEB6A32-E60B-4034-B4A1-8DC7F1E28E22.png

9F1DE33C-96F1-4384-ADB7-74F4E9BE03B0.png

  • api-system:api接口服务,主要是通过api接口封装获取用户信息,用户权限。
  • monitor:监控中心服务,这边也引入了Spring Cloud admin来作为服务的监控中心。

如何进行认证

首先要在Docker容器上启动我们的Nacos和Redis服务,然后启动我们的auth-service、gateway、api-system服务。

6AA24E31-14B9-46D4-B276-9026EACD5D44.png

接着通过调用我们gateway网关服务(端口9092),进行请求转发到auth-service认证服务中心,去获取token,这里通过对数据配置回获取不同管理员权限,

F1A3511B-40FD-4474-96F1-A9D05F9E7290.png 4EAD2C50-39E4-414D-9084-C8C646B5F8EB.png

BE88A4F9-B4FB-47E2-A2EA-01FD27CE374F.png

  • 在通过获取的access_token 请求api业务接口获取数据

5A329C8E-16AF-412F-A4C1-D6E2C0A95646.png

Demo地址有需要的小伙伴可以down下来看看 gitee.com/Lxlxx/erp-c…