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

实现思路

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

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

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

服务方面主要分为:

  • 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容器的时候都要进行启动。

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

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

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

如何进行认证

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

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

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

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

  • 使用密码模式来获取令牌,访问地址:http://localhost:9202/auth/oauth/token

 

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

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

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

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