讲师中心 微信公众号
AI工具推荐 视频效率加速

微服务架构中细粒度权限校验应在资源服务器而非 API 网关执行

千敏小哥_9829

千敏小哥_9829

发布时间:2026-10-08 10:33:46

|

321人浏览过

|

来源于php中文网

原创

微服务架构中细粒度权限校验应在资源服务器而非 API 网关执行

在微服务化改造中,细粒度权限(如基于角色、权限及属性的访问控制)应由各资源服务器自主校验;API 网关仅负责统一认证、令牌透传与客户端适配,避免安全逻辑集中化导致耦合与可维护性下降。

在微服务架构中,细粒度权限校验应在资源服务器而非 api 网关执行;api 网关仅负责统一认证、令牌透传与客户端适配,避免安全逻辑集中化导致耦合与可维护性下降。

权限校验的责任边界:资源服务器是唯一可信执行点

细粒度授权(Fine-Grained Authorization)——例如“用户是否具备对某订单执行‘退款审核’操作的权限,且该权限受限于所属部门和时间窗口”——本质上属于业务上下文强相关的逻辑。它随业务规则频繁演进,且不同微服务的数据模型、权限语义和策略引擎往往差异显著(如订单服务依赖组织架构,报表服务依赖数据分级标签)。因此,最佳实践是将权限决策完全下放到各资源服务器内部实现,而非在 API 网关统一拦截。

网关的核心职责是认证(Authentication)与协议转换,而非授权(Authorization):

  • ✅ 验证 accessToken 的签名、有效期、颁发者(issuer)和受众(audience);
  • ✅ 解析并透传令牌(如通过 Token Relay 将原始 accessToken 注入下游请求头);
  • ✅ 对 Web 客户端做额外防护(如解析 Secure Cookie、校验 CSRF Token、处理 CORS 头);
  • ❌ 不应解析权限声明(如 authorities)、不应对 scope 或自定义 claim 做业务级判断(如 “是否含 order:refund:approve 权限”)。

? 关键原则:网关保障“你是谁”,资源服务器决定“你能做什么”。

如何让资源服务器获取完整权限上下文?

既然网关只透传 accessToken,资源服务器如何获得所需的用户身份、角色与权限?答案是:将必要授权信息以标准或扩展声明(claims)嵌入 accessToken,由授权服务器(AS)在签发时注入。

例如,在 OAuth 2.1 / OIDC 流程中,授权服务器可在签发 accessToken 时包含以下 claims:

{
  "sub": "user-123",
  "scope": "api:read api:write",
  "roles": ["admin", "finance-auditor"],
  "permissions": ["order:refund:approve", "report:export:pdf"],
  "dept_id": "FIN-001",
  "allowed_regions": ["CN", "SG"]
}

资源服务(如 Spring Boot 微服务)可通过如下方式安全使用这些声明:

// 示例:基于 JWT claim 的权限检查(Spring Security + JWT)
@PreAuthorize("hasAuthority('order:refund:approve') && #order.deptId == principal.claims['dept_id']")
public void approveRefund(Order order) {
    // 执行退款审核逻辑
}

⚠️ 注意事项:

  • 绝不信任网关传递的 authorities 字段:若网关从 session cookie 中提取并伪造 authorities,会破坏零信任原则;
  • 令牌应由 AS 签发并签名:资源服务器通过公钥验证 JWT 完整性,确保 roles/permissions 等声明未被篡改;
  • 敏感属性需最小化暴露:避免在 accessToken 中携带 PII(如邮箱、手机号),可改用 id_token 或调用 UserInfo Endpoint 获取。

为什么不应在网关触发 OIDC 授权码流程?

问题中提到网关主动执行 authorization code flow 并携带 openid scope,这是典型的反模式:

  • ❌ 破坏客户端自治性:SPA、移动端 App、第三方系统等非浏览器客户端无法处理重定向响应,网关发起的重定向会导致 Ajax 请求失败或 iframe 跨域异常;
  • ❌ 混淆认证主体:网关作为中间层不应代表用户向 AS 发起登录,这违背 OAuth 2.1 的“client-directed authorization”原则;
  • ❌ 增加单点故障与延迟:每次 API 请求都可能触发完整 OIDC 流程,严重拖慢性能。

✅ 正确做法是:每个前端客户端(Web SPA、Mobile App、CLI)独立完成自己的 OIDC 登录流程,获取 accessToken 后直接调用 API。网关只需无状态地验证并转发该令牌。

客户端类型 推荐模式 网关角色
Web SPA PKCE + Authorization Code Flow 透传 accessToken,校验 JWT
移动 App PKCE 或 Device Code Flow 同上
Backend-for-Frontend (BFF) Authorization Code Flow(服务端渲染场景) BFF 是客户端,网关仍是透明代理

? 补充价值点:openid scope 仅在需要获取用户身份标识(如 sub, email, name)时由前端客户端申请,用于 UI 展示或用户会话管理;资源服务器通常无需 id_token,仅需 access_token 中的授权声明。

总结:构建可演进的安全分层架构

层级 职责 技术实现建议
API 网关 认证入口、令牌透传、CSRF/CORS、客户端适配 Kong / Apigee / Spring Cloud Gateway + JWT Filter
资源服务器 细粒度授权、业务策略执行、权限缓存 Spring Security + @PreAuthorize / Casbin / OPAL
授权服务器(AS) 签发含业务声明的 accessToken,管理权限映射 Keycloak / Auth0 / Custom AS with RBAC/ABAC rules

最终目标是实现:网关稳定少变、服务自治演进、安全策略贴近业务。当权限规则调整时,只需更新对应微服务的策略配置或代码,无需协调网关团队发布,大幅提升迭代效率与系统韧性。

热门AI工具

更多
蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

LibLibAI
LibLibAI Hot

一款AI视频创作工具,主要用于国内领先的AI创意平台,以海量模型、低门槛操作与“创作-分享-商业化”生态,让小白与专业创作者都能高效实现图文乃至视频创意表达,适合需要提升相关任务效率的用户。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

相关专题

更多
服务器是什么
服务器是什么

服务器是一种计算机硬件设备或软件程序,它具有强大的计算和存储能力,用请求、存储数据和提供服务。它在互联网中着关重要的作用,为用户提供各种服务和资源。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

437

2023.08.15

连接apple id服务器时出错
连接apple id服务器时出错

连接apple id服务器时出错的原因包括网络连接问题、服务器问题、Apple ID账户问题、设备问题、防火墙或安全软件问题、时间和日期设置问题、Apple服务器维护等。本专题为大家提供apple id相关的文章、下载、课程内容,供大家免费下载体验。

900

2023.09.08

搭建互联网服务器
搭建互联网服务器

搭建互联网服务器需要:1、选择合适的硬件和操作系统,第一步是选择合适的硬件和操作系统;2、安装和配置操作系统,是搭建互联网服务器的关键步骤;3、安装和配置服务器软件,是搭建互联网服务器的下一步,常见的服务器软件包括Apache、Nginx、Tomcat等;4、配置防火墙和安全性,是搭建互联网服务器的重要步骤;5、域名解析和配置,是搭建互联网服务器的最后一步。

2732

2023.09.19

如何查看服务器状态
如何查看服务器状态

查看服务器状态的方法有使用命令行工具、图形界面工具、监控工具、日志文件和远程管理工具等。本专题为大家提供服务器状态相关的文章、下载、课程内容,供大家免费下载体验。

916

2023.10.09

服务器域名转接慢怎么解决
服务器域名转接慢怎么解决

服务器域名转接慢的解决办法有DNS优化、服务器优化、CDN加速、前端优化和网络优化等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

809

2023.10.17

服务器评测软件
服务器评测软件

服务器评测软件有PassMark Software、CPU-Z、GPU-Z、CrystalDiskMark、IOmeter、JMeter、LoadRunner、Apache Bench等等。详细介绍:1、PassMark Software是一款综合性的服务器性能测试软件,可以评估服务器在各种负载条件下的性能;2、CPU-Z是一款可以提供服务器CPU详细信息的软件等等。

414

2023.10.17

如何开启TFTP服务器
如何开启TFTP服务器

开启TFTP服务器的步骤包括选择TFTP服务器软件、下载和安装软件、配置TFTP服务器以及启动和测试服务器等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2476

2023.10.18

服务器负载不兼容怎么解决
服务器负载不兼容怎么解决

解决方法:1、增加服务器资源;2、负载均衡;3、优化应用程序;4、增加缓存机制;5、分布式架构;6、限流和熔断;7、自动化扩容。想知道更详细服务器负载不兼容的解决方法,可以访问本专题下面的文章。

4592

2023.10.20

FrankenPHP集成Laravel详细教程
FrankenPHP集成Laravel详细教程

本专题提供FrankenPHP集成Laravel的详细配置指南,全面解析运行原理、开发环境搭建、Caddyfile配置、Octane工作模式、数据库连接、队列任务、定时任务和生产环境优化,解决部署过程中常见的报错与兼容性问题。

0

2026.10.08

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Hyperf官方中文手册(3.1)
Hyperf官方中文手册(3.1)

共0课时 | 0人学习

PHP课程
PHP课程

共137课时 | 22.1万人学习

进程与SOCKET
进程与SOCKET

共6课时 | 0.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn