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

Azure App Service上ASP.NET Core Web API启用Easy Auth强制认证返回401

问题分析与解决指导

你的核心问题是App Service Easy Auth与ASP.NET Core自身身份验证的双重拦截冲突:当设置"要求认证"时,Easy Auth会在请求到达API控制器前先验证令牌,但当前配置未正确识别客户端凭证流生成的令牌,导致直接返回401。以下是具体解决步骤:


1. 修正Azure AD应用注册配置

  • 确保API的应用注册(即appsettings.json中Audience对应的应用)已暴露API范围,且生成令牌的客户端应用已添加该范围的应用权限(而非委派权限),并完成管理员同意。
  • 验证客户端凭证流生成的令牌:用jwt.ms解析令牌,确认aud(受众)字段与Audience完全一致(包括api://前缀),iss(颁发者)为https://login.microsoftonline.com/{TenantId}/v2.0(或v1.0,匹配应用注册的端点版本)。

2. 配置Easy Auth适配客户端凭证令牌

在Azure Portal的App Service「Authentication」面板中:

  • 点击Microsoft身份提供商的「Edit」按钮,进入高级设置。
  • 在「Allowed token audiences」中添加你的API受众地址(api://xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)。
  • 启用「Token store」,确保Easy Auth能正确解析令牌并将身份信息传递给后端API。

3. 调整ASP.NET Core验证逻辑(二选一)

方案A:保留Easy Auth全权处理验证

移除ASP.NET Core中的JWT验证配置,仅保留授权逻辑:

// Program.cs中删除以下代码
// builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
//     .AddMicrosoftIdentityWebApi(builder.Configuration.GetSection("AzureAd"));

// 保留以下代码
builder.Services.AddAuthorization();
app.UseAuthorization();

Easy Auth会自动将身份信息注入HttpContext,控制器上的[Authorize]特性依然生效。

方案B:让ASP.NET Core处理验证,Easy Auth做前置拦截

若需保留API自身的验证逻辑,需配置Easy Auth仅拦截未携带令牌的请求:

  • 将Easy Auth的「未认证请求的处理操作」设置为「允许未认证请求」,但在API的Program.cs中确保UseAuthentication()和UseAuthorization()顺序正确,通过[Authorize]特性强制验证。
  • 同时在Easy Auth中配置「Allowed token audiences」,确保合法令牌能顺利通过前置拦截。

4. 测试验证

发送请求时确保Authorization头格式正确:Bearer {你的令牌},无多余空格或字符。测试通过后,再将Easy Auth的「未认证请求的处理操作」设回「要求认证」。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 00:58:11