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

ASP.NET Core 8中RequiredScope属性失效问题求助

问题根源

  1. 未采用Microsoft Identity Web的官方配置方式,导致[RequiredScope]的验证逻辑未正确注册
  2. 接口未添加[Authorize]属性,授权验证流程未触发,任意有效JWT都能绕过Scope校验访问接口
  3. 原生AddJwtBearer不会自动处理[RequiredScope]的验证逻辑,需使用专门的扩展方法

修复步骤

1. 确认安装Microsoft.Identity.Web包

如果项目未安装,在NuGet控制台执行:

Install-Package Microsoft.Identity.Web

2. 替换服务配置为AddMicrosoftIdentityWebApi

该方法会自动完成JWT验证、Scope解析及授权策略注册,替代原生AddJwtBearer:

builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApi(builder.Configuration.GetSection("AzureAd"));

// 保留此方法,注册RequiredScope的授权处理逻辑
builder.Services.AddRequiredScopeAuthorization();

// 可选:配置全局授权策略,避免每个接口重复写[Authorize]
builder.Services.AddAuthorization(options =>
{
    options.FallbackPolicy = new AuthorizationPolicyBuilder()
        .RequireAuthenticatedUser()
        .Build();
});

3. 给接口添加[Authorize]属性

缺少该属性时,授权验证流程不会启动,[RequiredScope]规则完全失效:

[HttpGet]
[Route("onlyfortestscope")]
[Authorize]
[RequiredScope("TestScope")]
public string OnlyForTestScope()
{
    return "You have access to this API";
}

4. 核对AzureAd配置

确保appsettings.json中的Audience与令牌的aud声明一致:

"AzureAd": {
    "Instance": "https://login.microsoftonline.com/",
    "TenantId": "你的租户ID",
    "ClientId": "API的客户端ID",
    "Audience": "api://API的客户端ID"
}

5. 处理短名称Scope(可选)

如果令牌中的Scope是短名称(如TestScope而非完整URI格式),添加配置允许短名称校验:

builder.Services.Configure<MicrosoftIdentityOptions>(options =>
{
    options.ScopeValidationOptions = new ScopeValidationOptions
    {
        AllowShortNames = true
    };
});

验证效果

修改完成后,未携带TestScope的有效JWT会返回403 Forbidden,只有包含该Scope的令牌才能成功访问接口。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 22:46:00