微服务网关整合授权中心实现单点登录
架构设计分析多点登录单点登录微服务接入网关实现单点登录设计思路对比维度方案一网关统一认证授权主流常用方案二网关仅转发各服务自行处理核心定位网关充当OAuth2.0 资源服务器网关只做路由转发无认证权限逻辑令牌校验网关统一解析、校验、拦截令牌下游每个微服务单独解析校验令牌权限拦截网关层统一拦截客户端接入权限各资源服务自行编写权限拦截逻辑用户信息传递网关解析后明文透传用户 / 权限信息给微服务下游服务自行从 Token 提取用户信息下游服务职责1. 业务接口权限二次校验2. 存入线程上下文1. 自研 Token 解析逻辑2. 认证 权限校验 用户信息封装开发成本低下游无需接入 OAuth2 机制高多服务重复编写认证授权代码统一管控权限、接入客户端全平台统一管控权限分散管控混乱标准不统一维护难度易维护认证逻辑集中网关维护繁琐版本不一致易出问题适用场景微服务集群、统一接口平台、多客户端接入小型单体拆分、简单独立服务搭建微服务授权中心组合 1Spring Authorization Server Spring Security Spring Cloud Gateway JWT官方主推新项目首选组件作用Spring Authorization Server授权中心OAuth2.1/OpenID ConnectSpring Security认证 / 授权底层、密码、会话、防护Spring Cloud Gateway网关统一鉴权、令牌校验、转发用户信息SpringJWTjjwt/nimbus无状态令牌网关解析后透传用户 / 权限Redis存储 Token、授权码、黑名单、会话优点✅Spring 官方标准持续更新支持 OAuth2.1、OIDC✅与 Spring Cloud 无缝集成网关 / 服务统一安全体系Spring✅网关统一校验 JWT下游微服务只做业务权限Spring✅细粒度权限 RBAC 方法级安全企业级能力✅可完全自研控制无外部依赖可控性强缺点❌配置偏多、学习曲线陡❌需自己开发用户 / 角色 / 客户端管理界面❌分布式会话、Token 黑名单需自己用 Redis 实现适用中大型微服务、Spring Cloud 体系、需要自研可控、强安全合规。组合 2Keycloak独立 IAM Spring Cloud Gateway Spring Security开箱即用SSO 强组件作用Keycloak独立授权中心 / 用户中心OAuth2OIDCSAMLSpring Cloud Gateway网关校验 Keycloak JWT、转发用户信息SpringSpring Security微服务侧权限、RBAC、方法拦截优点✅开箱即用 IAM用户 / 角色 / 客户端 / 权限管理 UI 全有✅原生支持 SSO、社交登录、LDAP、MFAKeycloak✅标准 OAuth2/OIDC多语言 / 多端接入友好Keycloak✅网关统一鉴权下游服务轻量Spring缺点❌独立服务运维成本高需部署、升级、监控❌定制化难UI、权限模型、登录流程改造成本高❌对 Spring 生态友好但非 Spring 技术栈也可用适用多系统统一身份、SSO 需求强、不想自研用户中心、中小团队快速落地。组合 3Sa-Token国产轻量 Spring Cloud Gateway Redis极简、快速、国内流行组件作用Sa-Token认证授权框架自研 OAuth2 模式、Session/JWTSpring Cloud Gateway网关统一拦截、校验 Token、转发用户信息SpringRedis分布式会话、Token 存储、续签、踢下线✅极简 API、零配置起步学习成本极低✅内置 OAuth2 模式、SSO、JWT、RBAC、数据权限✅国产、中文文档全、社区活跃、国内公司用得多✅网关 微服务统一方案代码量极少缺点❌非标准 OAuth2 实现生态不如 Spring 官方 / Keycloak❌企业级复杂权限模型ABAC支持较弱❌多语言 / 非 Java 端接入不如标准 OIDC 友好适用中小型微服务、快速开发、团队 Java 栈、不想啃复杂 Spring Security。授权中心的认证依赖第三方客户端的信息微服务的信息登录用户的信息授权码方式对比项授权码模式authorization_code密码模式password核心流程先拿授权码→后端用码换取令牌直接传账号密码→直接下发令牌安全等级最高行业标准低明文传递账号密码交互流程前端跳转授权页→用户确认授权→回调带回 code→后端静默换 token无页面授权直接接口请求令牌存放Token 存客户端后端前端无感知客户端可直接拿到完整令牌适用场景第三方登录、外网应用、有后端 Web 项目、主流第三方授权内网系统、自研项目、自家微服务内部信任调用优点防令牌泄露、流程严谨、符合 OAuth 规范、安全性强流程极简、调试方便、开发速度快缺点步骤多、配置繁琐、需配置重定向地址账号密码暴露、不可对外使用、安全风险高使用建议正式生产环境首选仅本地测试、内网调试使用禁止对外暴露开发调试、本地联调优先用密码模式快速获取 Token上线生产、对外对接必须改用授权码模式网关统一鉴权场景两种模式生成的 Token 格式一致网关均可统一解析校验Spring Security OAuth2 JWTJWT 组成说明内容示例编码方式安全性Header头部声明令牌类型 签名算法{alg:HS256,typ:JWT}Base64URL公开可解码不可藏敏感信息Payload载荷存放用户信息、权限、过期时间userId、username、roles、exp、iatBase64URL明文严禁存密码Signature签名防篡改验证令牌合法性HeaderPayload 密钥 加密结果加密算法生成不可伪造核心安全保障字段名全称作用expExpiration Time令牌过期时间iatIssued At令牌签发时间subSubject令牌面向的用户用户 IDissIssuer令牌签发方授权服务器jtiJWT ID唯一 ID防止重放攻击audAudience令牌接收方微服务对比项对称加密HS256非对称加密RSA密钥只有1 个密钥签名密钥公钥 私钥一对签名私钥签名 私钥验证私钥签名 公钥验证安全性一般密钥泄露即伪造令牌极高公钥公开也无法伪造网关 / 微服务所有服务必须持有 same 密钥仅授权服务器持私钥其他用公钥配置难度简单一行代码稍复杂需要生成 jks 证书生产推荐不推荐强烈推荐授权服务器用【私钥】给 JWT 签名 → 网关 / 微服务用【公钥】验证签名是否合法公钥可以随便公开私钥必须死死保住。颁发 Token授权服务器用户登录成功生成 JWT 的头部、载荷用私钥对头部 载荷进行签名返回 JWT 令牌给客户端→只有授权服务器能签发合法 Token前端把 JWT 传到网关网关用公钥验证签名验证通过 → 令牌没被篡改、是合法签发放行请求转发用户信息给微服务→公钥只能验证不能伪造令牌