You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于JWT的API授权:如何拦截用户B越权访问用户A的特定Item?

阻止用户B删除用户A所属Item的最优授权拦截方案

核心要解决的是资源所有权的细粒度校验——用户B虽然有调用DELETE /item/{id}接口的权限,但没有操作用户A创建的Item的权限,网关层的JWT和接口权限校验无法覆盖这个场景,最优方案如下:

首选方案:业务服务层增加资源归属校验

当用户B发送DELETE /item/1请求时,按以下步骤处理:

  • 从请求携带的JWT中解析出用户B的唯一标识(比如user_id);
  • 业务服务查询数据库,获取Item 1的创建者ID(即用户A的user_id);
  • 对比当前用户ID与Item创建者ID:若不一致,直接返回403 Forbidden状态码,拒绝请求;若一致,则执行删除操作。

为什么这是最优解?

  • 符合职责分离原则:网关只负责通用校验(JWT合法性、接口权限、限流等),资源归属属于业务逻辑,放在业务层更合理,避免网关耦合业务细节;
  • 数据可靠:直接从数据库获取归属信息,不会出现权限数据不一致的问题;
  • 改动成本低:不需要修改网关配置,只需要在业务接口的逻辑前增加一段归属校验代码,快速落地。

可选优化方向

  • 性能优化:把Item的创建者ID缓存到Redis等缓存组件中,避免每次校验都查询数据库,提升接口响应速度;
  • 多服务场景适配:如果是微服务架构,可以单独搭建授权服务,基于ABAC(基于属性的访问控制)模型,业务服务调用授权服务校验“当前用户是否拥有该Item的删除权限”,实现授权逻辑的集中管理,方便后续扩展更多权限规则。

注意:不建议在网关层做这个校验,因为网关需要额外调用业务服务或数据库来获取Item归属,会增加网关的复杂度和性能开销,违背网关“轻量通用”的设计初衷。

内容的提问来源于stack exchange,提问作者Jingon Park

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 16:52:15