微服务架构中的安全边界:网关鉴权 vs 子系统本地鉴权

微服务架构中的安全边界:网关鉴权 vs 子系统本地鉴权

在学习微服务架构(如 RuoYi-Cloud)时,很多开发者会产生一个经典疑问: "既然我已经有了一个统一的 Gateway 网关来做全局鉴权了,为什么像监控中心(Monitor)这样的子系统,还要自己引入 Spring Security 再做一层本地鉴权?这不是重复造轮子吗?"

这个疑问背后,隐藏着微服务架构设计中的两个核心考量:"路由边界""零信任纵深防御"


一、 为什么不全靠网关?(监控中心的特殊性)

首先,我们必须明确微服务组件的物理部署与路由关系

1. 业务服务的标准流转

对于普通的业务微服务(如 ruoyi-system):

  • 流量路径:前端 -> Gateway (8080端口) -> 业务微服务 (9201端口)。

  • 鉴权逻辑 :网关负责校验 Token 的合法性,校验通过后,将 UserID 等信息塞入 Header,转发给下游服务。下游服务完全信任网关透传过来的请求。

2. 监控中心的"法外之地"

监控中心(ruoyi-visual-monitor)是一个特殊的纯运维级系统

  • 流量路径 :为了防止网关宕机导致监控系统也无法访问,监控中心通常不会挂在网关后面 。运维人员会直接通过 http://服务器IP:9100 访问监控中心。

  • 致命缺陷:既然它绕过了网关,网关上的全局 Token 校验对它就形同虚设。如果它自己不加锁,任何知道 IP 和端口的人都能直接访问并控制你的所有服务器。

结论一:因为不在网关的保护伞下,所以必须自备门禁。


二、 认证机制的天然差异:Token vs Session

即使你强行把监控中心挂在网关后面,也会遇到第二个问题:认证协议不匹配

1. 网关的无状态 API 鉴权 (Token)

  • 网关是为前后端分离的无状态 API 设计的。

  • 它的介质是 JWT Token,逻辑通常是开发者自己手写的(比如解析 Header 里的 Authorization 字段)。

2. 监控中心的有状态 Web 鉴权 (Session)

  • 监控中心(底层是 Spring Boot Admin)是一个传统的、自带 HTML 页面的 Web 应用

  • 它的受众是需要在浏览器里输入账号密码,然后保持长期登录状态的管理员。

  • 这种场景下,基于 Cookie 和 Session 的传统表单登录才是最合适的。而这正是 Spring Security 最擅长的老本行。

结论二:业务 API 用 Token(网关手写),传统 Web 控制台用 Session(引入 Security),各司其职。


三、 高级架构理念:零信任与纵深防御 (Zero Trust)

在企业级安全架构中,有一个重要原则:"永远不要相信任何网络请求,即使它是从内网发出来的。"

假设我们完全依赖网关的保护,这就相当于把所有的宝都压在了"小区大门保安"身上:

  • 如果黑客利用了网关的某个 0day 漏洞绕过了大门。

  • 如果黑客直接潜入了内网,绕开网关,直接对 9100 端口发起请求。

如果监控中心(它有权限下载内存快照、甚至关停服务)处于"裸奔"状态,整个系统瞬间沦陷。

纵深防御策略(Defense in Depth):

  • Gateway 网关:小区大门保安,负责过滤 99% 的外部非法流量。

  • Spring Security (监控中心):自家入户门的指纹锁,负责守护最核心的运维资产。


总结

在微服务架构中,"统一网关鉴权""子系统引入 Security" 并不冲突,而是互补的。

下次如果有人问你这个问题,你可以这样回答:

"网关鉴权是针对无状态业务 API 的第一道防线;而监控中心作为绕过网关直连的运维控制台,且属于传统的有状态 Web 应用,必须引入 Spring Security 来实现基于表单的本地 Session 鉴权,这既是协议适配的需要,也是微服务纵深防御安全理念的体现。"

相关推荐
苍煜21 分钟前
现代生产级微服务+容器治理完整技术栈与架构方案详解(国内主流完整云原生微服务闭环架构)
微服务·云原生·架构
文慧的科技江湖6 小时前
零碳园区综合管理平台PRD需求文档 - 慧知开源充电桩平台
spring cloud·微服务·开源·能源·慧知开源光储充管理平台·慧知开源光储充管理系统·零碳园区管理平台
努力努力再努力wz6 小时前
【Redis 入门系列】为什么需要 Redis?一文串起缓存、分布式、读写分离、分库分表与微服务
数据库·redis·分布式·sql·mysql·缓存·微服务
团象科技7 小时前
当出海合规压力持续上升时,多云服务容易忽略哪些细节
大数据·微服务·架构
番茄去哪了7 小时前
单体转微服务:微服务保护和分布式事务(上)
分布式·微服务·架构
Flittly7 小时前
【日常小问】解决 Jenkins 部署 Spring Cloud 微服务到 Docker 容器启动失败的问题
运维·笔记·docker·微服务·jenkins
aXin_ya8 小时前
微服务第十一天 MQ相关问题
java·微服务·架构
一起学开源8 小时前
业务架构如何指导微服务拆分?
微服务·云原生·架构·架构设计·微服务拆分·业务架构
苏渡苇17 小时前
万字长文 | Spring Cloud Alibaba组件之Nacos实战及Nacos客户端服务注册源码解析
spring cloud·微服务·nacos·注册中心·配置中心·sca
亚历克斯神17 小时前
Java 25 模式匹配增强:让代码更简洁优雅
java·spring·微服务