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

API调用始终返回403错误:ListStockPolicy权限配置异常排查

排查API接口403权限错误的几个关键方向

从你提供的代码和描述来看,其他权限策略都正常运行,只有新增的LIST_STOCK策略返回403,大概率是Claim定义、Token生成或策略匹配环节的细节问题,可以按以下步骤逐一排查:

1. 检查Claim类型的引用是否存在混淆

看你的代码结构,ListStockClaims是嵌套在ClaimsStock类内部的,但ListStockPolicy里直接实例化了ListStockClaims——如果没有显式指定命名空间或类路径,很可能出现引用错误(比如存在同名类),导致策略要求的Claim类型和实际Token中的不匹配。

建议修改ListStockPolicy,显式引用嵌套类:

public class ListStockPolicy { 
    public const string Name = "LIST_STOCK"; 
    public static ClaimsStock.ListStockClaims Claims = new ClaimsStock.ListStockClaims(); 
}

同时确认策略注册时的Claim类型完全一致:

options.AddPolicy(ListStockPolicy.Name, policy => 
    policy.RequireClaim(ClaimsStock.ListStockClaims.Type));

2. 验证Token中是否包含目标Claim

即使数据库配置了权限,也要确认生成的JWT Token里是否真的携带了Platform.Api.LIST_STOCK这个Claim:

  • 用jwt.io解码你的Bearer Token,查看Payload里的claims列表
  • 确认是否存在type为Platform.Api.LIST_STOCK的条目(策略只要求存在该Claim类型,默认不校验Value,所以只要有这个Type即可)
  • 如果Token里没有这个Claim,需要检查权限赋值到Token的逻辑,确保用户的权限被正确映射到Claim中

3. 检查策略注册与控制器标签的一致性

再确认两个细节:

  • ListStockPolicy.Name的常量值确实是"LIST_STOCK",和控制器[Authorize]标签里的Policy名称完全匹配
  • 策略注册代码是否在AddAuthorization的配置块内,没有被其他配置覆盖或遗漏

4. 排除中间件顺序问题

确认你的中间件注册顺序符合ASP.NET Core的规范:

  • AddAuthentication和AddAuthorization要在AddControllers之后注册
  • UseAuthentication和UseAuthorization要在UseRouting之后、UseEndpoints之前调用
    错误的中间件顺序可能导致权限校验逻辑无法正确触发

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:39:19