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

Azure添加Scope后仍出现401授权失败问题求助

解决ASP.NET Core API添加Azure AD Scope后仍报401(ScopeAuthorizationRequirement:Scope=)的问题

你遇到的错误ScopeAuthorizationRequirement:Scope=说明授权过程中未匹配到有效的Scope配置,结合你的操作,可按以下步骤排查修复:

1. 检查API项目配置文件

确保appsettings.json中的Azure AD配置包含你创建的完整Scope值,格式为api://{API客户端ID}/{Scope名称}:

"AzureAd": {
  "Instance": "https://login.microsoftonline.com/",
  "Domain": "your-domain.onmicrosoft.com",
  "TenantId": "你的租户ID",
  "ClientId": "你的API应用注册ClientID",
  "Scopes": "api://xxxxxx-xxxx-xxxx-xxxx-xxxxxx/access_as_user"
}

2. 修正授权策略配置(非Minimal API)

在Startup.cs的ConfigureServices方法中,明确指定需要验证的Scope:

  • 方式一:添加自定义策略并在控制器上引用
services.AddAuthorization(options =>
{
    options.AddPolicy("ApiScopePolicy", policy =>
        policy.RequireScope("access_as_user")); // 填写你创建的Scope名称
});

然后在控制器上应用该策略:

[Authorize(Policy = "ApiScopePolicy")]
[ApiController]
[Route("api/[controller]")]
public class YourController : ControllerBase
{
    // 接口逻辑
}
  • 方式二:设置全局默认授权策略
    如果要让所有接口都验证该Scope,可配置默认策略:
services.AddAuthorization(options =>
{
    options.DefaultPolicy = new AuthorizationPolicyBuilder()
        .RequireAuthenticatedUser()
        .RequireScope("access_as_user")
        .Build();
});

3. 验证AccessToken是否包含目标Scope

使用JWT解析工具解析客户端获取的AccessToken,检查scp声明(Delegated权限场景)或roles声明(Application权限场景)中是否存在你创建的Scope名称:

  • 用户身份调用(Delegated权限)看scp字段;后台服务调用(Application权限)看roles字段
  • 如果Token中没有该Scope,说明客户端请求Token时未指定正确的Scope参数,需调整客户端请求的Scope为api://{API客户端ID}/{Scope名称}

4. 确认API权限的授予状态

  • 若使用Delegated权限:确保已完成用户同意(或管理员批量同意)
  • 若使用Application权限:需在API权限页面点击"授予管理员同意",且客户端应用已添加该权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 19:22:55