Azure Web App配置Microsoft身份验证后无登录页且API调用401
ASP.NET Core Web API Azure身份验证问题解决方案
问题概述
- Azure Web App配置Microsoft身份验证后,访问
/weatherforecast未跳转登录页,直接显示权限不足提示。 - 桌面客户端获取的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
相关产品推荐
相关产品推荐

