Azure AD认证正常时Postman调用.NET5 Azure Web API返回401未授权
配置问题排查清单
- 首先检查Postman请求令牌时的scope参数是否正确:请求token时必须使用你API注册时暴露的scope,格式一般为
api://<你的API Client ID>/<自定义scope名>,不能使用Graph或者其他第三方资源的scope,否则token的受众声明不匹配,API校验会直接返回401。 - 检查令牌的受众(aud)声明:把你拿到的JWT令牌复制到任意本地JWT解析工具中,确认
aud字段的值和你appsettings.json里的ClientId完全一致,如果aud是api://<ClientId>格式,你需要在服务注册时显式添加合法受众:
services.AddMicrosoftIdentityWebApiAuthentication(Configuration, "AzureAd", jwtBearerOptions => { jwtBearerOptions.TokenValidationParameters.ValidAudiences = new List<string> { Configuration["AzureAd:ClientId"], $"api://{Configuration["AzureAd:ClientId"]}" }; });
- 检查
TenantId配置是否正确:如果你的API是单租户访问,appsettings.json里的TenantId必须填写你实际的租户ID,不能使用common、organizations这类通配值,否则租户校验不通过。 - 检查Postman请求头格式:请求头中的
Authorization字段必须是Bearer <你的令牌>格式,注意Bearer和令牌字符串之间有且仅有一个空格,不能多写、漏写空格或者拼写错误。 - 检查Azure AD的API权限配置:进入你API对应的Azure AD注册页,在「公开API」板块确认已经添加了至少一个自定义scope,同时Postman使用的客户端应用已经被授予了该scope的访问权限,需要管理员同意的权限要提前完成管理员同意操作。
- 检查中间件顺序:你当前的
UseAuthentication和UseAuthorization顺序是正确的,但要确认这两个中间件是放在UseRouting之后、UseEndpoints之前,顺序错误也会导致授权失效。 - 移除无用配置:Web API不需要
CallbackPath配置,这个参数是给带前端登录逻辑的Web应用使用的,你可以直接删掉appsettings.json里的CallbackPath字段,不会影响API的令牌校验逻辑。
内容的提问来源于stack exchange,提问作者Simone
相关产品推荐
相关产品推荐

