使用MicrosoftIdentityWebApi认证时MSAL获取的access token报401未授权
问题根因
你当前获取的AccessToken是颁发给Microsoft Graph API的,无法通过你自有Web API的身份校验,所以返回401未授权。
需要补充的配置和修改项:
Azure应用注册侧配置
- 进入Azure门户的「应用注册」页面,找到你当前使用的ClientId对应的应用
- 切换到「公开API」板块,点击「添加作用域」,按照提示设置作用域名称(比如
Access.Api),配置为允许所有用户同意,状态设置为启用,最终生成的完整作用域格式为api://{你的ClientId}/Access.Api
代码中获取Token的逻辑修改
你当前获取Token时传入的scopes是空数组,默认会申请Graph的默认权限,需要将scopes替换为你上一步创建的自有API作用域:// 替换原有空scopes配置 string[] scopes = new string[] { "api://2f0d9252-e207-4d7f-b4da-0cc618e77c93/Access.Api" };服务配置校验
确认Startup中身份验证配置明确绑定AzureAd配置节,避免读取配置错误:services.AddMicrosoftIdentityWebApiAuthentication(Configuration, "AzureAd");
排障小技巧
如果修改后还是报错,可以将获取到的AccessToken复制到JWT解析工具中,核对以下两个字段:
aud(受众)字段值必须和你appsettings.json中配置的Audience一致scp(权限)字段必须包含你刚才定义的自有API作用域
内容的提问来源于stack exchange,提问作者Anthony Earl R. Cuartero
相关产品推荐
相关产品推荐

