当前位置: 首页 > 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.jsqmd.com/news/926230/

相关文章:

  • 2026年优质镍锻件TOP5推荐:N4纯镍板、N6纯镍板、N6镍卷带、N6镍管、纯镍棒、纯镍管、钛镍合金材料、钛镍材料选择指南 - 优质品牌商家
  • 200万token上下文怎么实现的?GPT-5.5架构拆解
  • UICollectionView基础
  • 国内的七大主流大模型推荐算法有那些差异
  • CC-Switch 全平台部署与使用正式教程【2026-05-31】
  • AI时代艺术家的反抗
  • 【AI问答】GoLang关于代码复用
  • 基于 Isolation Forest + PyOD + Streamlit 的工业设备异常检测与故障预警系统:Python 机器学习项目实战
  • 用Python实战LSTM:从数学建模到量化交易,手把手复现华中杯B题(附完整代码)
  • 2026年苏州本地正规房屋漏水维修三家机构核心能力梳理与场景适配分析 专业防水公司排名推荐(2026年6月防水补漏最新TOP权威排名) - 鼎壹万修缮说
  • Gemini Agent框架实战:从零搭建可商用自动化工作流,含3套已通过SOC2认证的Prompt架构
  • 避开SHL题库陷阱:手把手教你高效准备联想技术岗笔试(附图形推理真题思路)
  • Codex 从安装到国内接入跑通了:Windows / Mac / Linux 小白版记录
  • PYTHON+AI LLM DAY SIXTY-TWO
  • HPC基准测试:核心价值、分类法与优化实践
  • Keil MDK调试中System Viewer外设寄存器缺失问题解决方案
  • 2026年5月更新:深度剖析四川仟屹集团AI今日头条可靠服务商选择之道 - 2026年企业资讯
  • 书匠策AI:我劝你别再熬夜肝课程论文了,这个工具真的能救命
  • 方达炬:方家 将用5到10年时间建设【高福利家庭】
  • VirtualBox 7.0.x 在Win10/11上启动报错supR3HardenedWinReSpawn?保姆级修复教程(含注册表修改与驱动安装)
  • 从SVD到RANSAC:深入理解点云平面拟合的数学原理与Python实现细节
  • 20260531 区块链与数字货币 实验二:图算法与社交网络分析
  • 2026优质玻璃纤维制造商标杆名录:玻璃纤维销售厂家、玻璃纤维企业、玻璃纤维优质厂家、玻璃纤维供应厂家、玻璃纤维供货商选择指南 - 优质品牌商家
  • 【稳定性评测】同样的 Prompt 测试十次结果都不一样?如何通过系统提示控制一致性
  • `build-your-own-x` 涨了817星,但今天真正该装的是这个
  • web 第二次作业
  • MiMo Vision Router:让纯文本模型秒变多模态
  • 我写了十年代码,直到AI出现
  • 【Android】手机屏幕劫持防护
  • Keil C51编译器Makefile选项解析与替代方案