当前位置: 首页 > news >正文

Spring Boot 、Spring Cloud 微服务架构认证授权方案

目录

  • 前言
  • 方案一:JWT + Spring Security(最常用)
    • 1.登录
    • 2.请求
    • 3.Gateway统一校验
    • 4.Gateway过滤器
    • 5.微服务是否还要校验?
      • 做法1
      • 做法2(推荐)
    • 6.Token过期怎么办
    • 7.Access Token + Refresh Token
      • Access Token
      • Refresh Token
  • 方案二:OAuth2 标准方案
  • 方案三:国内项目常用:Sa-Token
  • 方案四:证券行业推荐架构

前言

Spring Boot 或者 Spring Cloud 微服务架构中最常见的认证授权场景

需求场景:

  1. 用户登录后颁发 Token
  2. 所有微服务校验 Token
  3. Token 过期自动续签
  4. 微服务之间调用传递用户身份

目前主流方案有:

方案推荐度适用场景
JWT + Spring Security★★★★★最常见
OAuth2 + Spring Authorization Server★★★★★企业级标准方案
Sa-Token★★★★★国内项目非常流行
Apache Shiro★★老项目较多
Session共享(Redis)★★单体项目较多

对于 Spring Cloud 项目,现在最主流的是:

Spring Security + JWT + Gateway

或者

Spring Authorization Server + OAuth2 + JWT


方案一:JWT + Spring Security(最常用)

架构:

登录 +-------------+ | auth-service | +-------------+ | | 生成JWT ▼ eyJhbGciOiJIUzI1NiJ9... | ▼ 浏览器/APP保存Token | ▼ Gateway | ▼ user-service order-service

1.登录

用户登录:

POST /login { "username":"admin", "password":"123456" }

认证成功:

{"token":"xxxxx.yyyyy.zzzzz"}

JWT内容:

{"userId":1001,"username":"admin","role":"ADMIN","exp":1750000000}

2.请求

GET /user/info Authorization: Bearer xxxxx.yyyyy.zzzzz

3.Gateway统一校验

不要每个微服务都校验。

一般放在 Gateway。

用户 ↓ Gateway ↓ UserService ↓ OrderService

流程:

请求 ↓ Gateway ↓ 解析JWT ↓ 验证签名 ↓ 验证过期时间 ↓ 放行

失败:

{"code":401,"msg":"token已失效"}

4.Gateway过滤器

例如:

@ComponentpublicclassJwtFilterimplementsGlobalFilter{@OverridepublicMono<Void>filter(ServerWebExchangeexchange,GatewayFilterChainchain){Stringtoken=exchange.getRequest().getHeaders().getFirst(HttpHeaders.AUTHORIZATION);if(token==null){thrownewRuntimeException("未登录");}JwtUtil.parse(token);returnchain.filter(exchange);}}

这样所有微服务自动生效。


5.微服务是否还要校验?

有两种做法。

做法1

只在Gateway校验

用户 ↓ Gateway ↓ UserService

优点:

性能高

缺点:

绕过Gateway直接访问服务有风险


做法2(推荐)

Gateway校验一次

微服务再校验一次

用户 ↓ Gateway ↓ UserService ↓ 再次校验JWT

银行、证券、支付系统通常这样做。

你在证券行业,建议采用这种模式。


6.Token过期怎么办

JWT天然有过期时间:

Jwts.builder().setExpiration(newDate(System.currentTimeMillis()+3600_000))

例如:

1小时过期

问题来了

用户操作到59分钟时:

突然过期

体验很差。

所以需要:

Access Token + Refresh Token

7.Access Token + Refresh Token

登录:

{"accessToken":"xxx","refreshToken":"yyy"}

Access Token

有效期:

30分钟

Refresh Token

有效期:

7天

流程:

用户请求 ↓ Access Token过期 ↓ 401 ↓ 前端调用 /auth/refresh ↓ 携带Refresh Token ↓ 认证中心 ↓ 签发新的Access Token

用户无感知。


方案二:OAuth2 标准方案

大厂一般:

Authorization Server + Resource Server

Spring 官方方案:

  • Spring Security
  • Spring Authorization Server

架构:

+------------------+ | Authorization | | Server | +------------------+ | 签发JWT | +---------+ +---------+ | UserSvc | |OrderSvc | +---------+ +---------+

认证中心负责:

登录 签发Token 刷新Token 注销Token

业务系统负责:

校验Token 读取用户信息

职责非常清晰。


方案三:国内项目常用:Sa-Token

如果你不想写一堆 Spring Security 配置。

推荐:

Sa-Token 官方网站

特点:

比Spring Security简单 支持JWT 支持Redis 支持单点登录 支持权限控制 支持踢人下线 支持Token续签

登录:

StpUtil.login(userId);

获取Token:

Stringtoken=StpUtil.getTokenValue();

校验:

StpUtil.checkLogin();

非常简单。

很多国内中后台项目都在使用。


方案四:证券行业推荐架构

如果目前的技术栈是Spring Boot + Spring Cloud:

Gateway │ ▼ auth-service │ ┌──────────────┼──────────────┐ ▼ ▼ ▼ user-service order-service trade-service │ ▼ Redis

认证方案:

Spring Security + JWT + Redis + Gateway

Token设计:

Access Token 30分钟 Refresh Token 7天

流程:

登录 ↓ auth-service签发Token ↓ Gateway校验 ↓ 微服务二次校验 ↓ 过期 ↓ Refresh Token换新Token

这是目前绝大多数金融、证券、银行类 Spring Cloud 系统采用的模式。


其他建议深入理解的:

  • Spring Security 认证流程
  • JWT 的组成与签名原理
  • OAuth2 四种授权模式
  • Spring Authorization Server
  • Gateway 统一鉴权
  • Refresh Token 续签机制
  • 单点登录(SSO)
  • Redis 黑名单 Token
  • 用户强制下线实现原理
http://www.rkmt.cn/news/1437565.html

相关文章:

  • 2026年优质镍锻件TOP5推荐:N4纯镍板、N6纯镍板、N6镍卷带、N6镍管、纯镍棒、纯镍管、钛镍合金材料、钛镍材料选择指南 - 优质品牌商家
  • UICollectionView基础
  • CC-Switch 全平台部署与使用正式教程【2026-05-31】
  • 用Python实战LSTM:从数学建模到量化交易,手把手复现华中杯B题(附完整代码)
  • Codex 从安装到国内接入跑通了:Windows / Mac / Linux 小白版记录
  • VirtualBox 7.0.x 在Win10/11上启动报错supR3HardenedWinReSpawn?保姆级修复教程(含注册表修改与驱动安装)
  • Kimi LeetCode 2911. 得到 K 个半回文串的最少修改次数 Java实现
  • 机械臂角度识别 机械臂自由度识别 yolov8机械臂关键点检测模型部署+教程+代码+数据集+工业应用
  • 2026年汽车静电阻隔面料实测评测:四家企业横向对比 - 优质品牌商家
  • 书匠策AI:你的课程论文救急神器,用过的人都说“真香“
  • 别再死记硬背了!用C语言手写一个test_and_set(),彻底搞懂操作系统硬件锁
  • AMP算法实战:用Python从零实现压缩感知信号恢复(附完整代码与避坑指南)
  • 实战落地+数据可视化:6月最新重庆优质GEO优化服务商榜单深度测评 - 品牌官
  • 2026年苏州防水维修标杆机构专业市场分析与全场景渗漏治理选型适配指南 专业防水公司排名推荐(2026年5月防水补漏最新TOP权威排名) - 鼎壹万修缮说
  • 集团首都公报:放飞炬人集团内政署批准起草《出口劳务法案》《劳务产能调整和AIQI技艺法案》
  • 【案例分享】我从失败中学到的架构教训
  • 2026年当下河北地区镶铜铸铁闸门采购指南:实力厂家深度解析 - 2026年企业资讯
  • 2026年当前秦皇岛婚礼酒店哪个好?深度解析秦皇岛万怡酒店婚宴实力 - 2026年企业资讯
  • 2026年q2四川无机涂料外墙厂家排行及选型推荐:无机涂料多少钱一平方/无机涂料工程专用/实力盘点 - 优质品牌商家
  • 2026年苏州本地专业防水补漏领域五家合规经营企业深度梳理与场景适配分析 专业防水公司排名推荐(2026年5月防水补漏最新TOP权威排名) - 鼎壹万修缮说
  • 2026年苏州3家资质齐全防水补漏服务商核心市场适配与专业能力分析报告 专业防水公司排名推荐(2026年5月防水补漏最新TOP权威排名) - 鼎壹万修缮说
  • 逐位二进制拼接 → 翻转 → 去头零 → 消邻重
  • 用Python和R实战检验皮尔逊相关性五大假设(附完整代码与可视化)
  • K-means实战避坑指南:如何用肘部法则和轮廓系数找到最佳K值(附Python代码)
  • HTML5 新特性概览:探索现代 Web 的强大能力
  • 从手动混乱到智能有序:Irony Mod Manager如何让Paradox游戏模组管理效率提升3倍?
  • VoxCPM 语音模型新手部署与调用全指南
  • QGIS新手避坑指南:从高德路网数据到空间分析的全流程实操
  • Django+Vue智慧农业管理系统源码+论文
  • 别再当‘黑盒’模型受害者了!用Python的shap库5分钟看懂你的XGBoost模型决策