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

Azure Web App配置Microsoft身份验证后无登录页且API调用401

ASP.NET Core Web API Azure身份验证问题解决方案

问题概述

  1. Azure Web App配置Microsoft身份验证后,访问/weatherforecast未跳转登录页,直接显示权限不足提示。
  2. 桌面客户端获取的Bearer Token验证参数(aud、iss、appid)均正确,但调用API仍返回401 Unauthorized。

可复现步骤

创建Web应用

  • Visual Studio中创建.NET 8.0的ASP.NET Core Web API项目WebAppApi,身份验证设为None,启用HTTPS,使用控制器,运行正常。

创建Azure Web App

  • Azure门户创建同名Web App,运行时栈选.NET 8,免费F1定价计划,启用基础身份验证,下载发布配置文件。

发布Web应用

  • Visual Studio导入配置文件完成发布,访问默认域名+/weatherforecast可正常获取数据。

配置应用身份验证

  • Azure Web App「设置-身份验证」添加Microsoft身份提供商,工作区配置创建新应用注册(当前租户),设置仅允许租户请求、要求身份验证,选择HTTP 401并勾选Token Store。

验证访问

  • 访问API路径出现权限不足提示,客户端带Token调用返回401。

解决方案

1. 完善Web API项目的身份验证配置

项目初始身份验证为None,需添加Azure AD身份验证支持:

  • 在Program.cs中添加身份验证服务:
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.Identity.Web;

var builder = WebApplication.CreateBuilder(args);

// 添加Azure AD身份验证服务
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApi(builder.Configuration);

// 添加控制器服务
builder.Services.AddControllers();

var app = builder.Build();

// 启用认证和授权中间件(顺序不能错)
app.UseAuthentication();
app.UseAuthorization();

app.MapControllers();

app.Run();
  • 在WeatherForecastController上添加[Authorize]特性,强制要求授权:
[Authorize]
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
    // 原有代码保持不变
}

2. 调整Azure App Service身份验证设置

  • 若需浏览器访问时跳转登录页,将「未授权请求的操作」从HTTP 401 Unauthorized改为HTTP 302 Found(重定向到登录页);API客户端调用场景保留401。
  • 检查应用注册的重定向URI,确保包含https://<your-webapp-name>.azurewebsites.net/.auth/login/microsoft/callback(Azure通常自动配置,手动确认无误)。

3. 修复桌面客户端401问题

  • 确保请求Header正确携带Token:
Authorization: Bearer <your-access-token>
  • 确认API应用注册已添加客户端应用的Delegated权限,并完成管理员同意(租户级权限需此操作)。
  • 在API项目的appsettings.json中配置正确的Azure AD参数,Audience需匹配API应用注册的Client ID或应用ID URI:
"AzureAd": {
  "Instance": "https://login.microsoftonline.com/",
  "TenantId": "<你的租户ID>",
  "ClientId": "<API的应用注册Client ID>",
  "Audience": "<API的应用注册Client ID或应用ID URI>"
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 18:40:55