.NET 6 Azure App Service API调用401问题排查求助
排查Azure App Service上.NET 6 Web API 401未授权问题的步骤
1. 核对Azure AD应用注册配置一致性
- 检查Azure App Service应用设置里的
AzureAd:TenantId、AzureAd:ClientId,确保和本地开发环境配置完全一致,无拼写错误或新旧值混淆 - 确认API的应用注册已启用对应令牌类型:如果用ID令牌则开启ID令牌,用访问令牌则开启访问令牌,保证与请求时的令牌类型匹配
- 验证API应用注册的公开API模块中,已正确配置
access_as_user等必要范围,且Postman请求时指定的范围完全匹配
2. 校验Postman令牌获取参数
- 确认Postman使用的租户ID、客户端ID、客户端密钥(若用客户端凭证流)均对应生产环境的应用注册,而非本地测试用的配置
- 解析Postman获取的令牌(可通过jwt.ms),检查
aud字段是否与API的应用ID URI一致——即使代码未显式验证受众,Azure AD中间件可能默认校验该字段 - 查看令牌的
exp字段,确保请求时令牌未过期
3. 检查Azure App Service身份验证设置
- 进入App Service的身份验证面板,确认已启用Azure AD身份验证,且关联的应用注册为当前API的正确应用注册
- 确认“未经过身份验证的请求”设置为「HTTP 401 未授权」,避免跳转逻辑干扰API的令牌验证流程
- 检查是否误启用了App Service的系统分配托管标识,若无需使用可暂时关闭后测试
4. 核查.NET 6 API中间件配置
- 确认Program.cs/Startup.cs中,
AddAuthentication(JwtBearerDefaults.AuthenticationScheme)和AddJwtBearer的配置正确,Authority参数需指向正确的Azure AD租户地址(格式:https://login.microsoftonline.com/{tenantId}) - 即使你未显式验证受众,检查是否存在隐含校验逻辑:比如
AddMicrosoftIdentityWebApi默认会启用受众验证,或代码中是否设置了TokenValidationParameters.ValidAudience - 确认
app.UseAuthentication()和app.UseAuthorization()的顺序正确,前者必须在前者之前添加
5. 验证Azure AD权限与同意状态
- 确认服务主体(应用注册)已被授予User.Read权限,且完成了对应同意:应用权限需管理员同意,委托权限需用户/管理员同意,避免权限被撤销或未同步
- 排查最近是否有Azure AD权限变更操作,比如权限范围修改、应用注册权限被移除
6. 采集更详细的错误日志
- 在App Service应用设置中添加以下配置,开启详细身份验证日志:
重新发起API请求后,通过日志流查看令牌验证的具体错误细节(如签名失败、颁发者不匹配等)ASPNETCORE_ENVIRONMENT=Development Microsoft.IdentityModel.Logging__LogLevel=Verbose - 查看Azure AD的登录日志,搜索对应请求记录,获取失败原因的详细描述
内容的提问来源于stack exchange,提问作者aka17
相关产品推荐
相关产品推荐

