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

.NET中使用MSAL对接Azure AD认证调用授权接口返回401问题求助

问题核心原因

你获取的访问令牌默认面向Microsoft Graph发行,而非你自己的后端API,所以API侧的权限校验不通过返回401,这也是为什么同一个令牌可以正常调用Graph接口。

修复步骤

  1. 在Azure AD应用注册中暴露自定义API权限
    进入你当前使用的ClientId对应的Azure AD应用注册页,找到「公开API」菜单,添加一个作用域:
  • 作用域名称填access_as_user
  • 谁能同意选择「管理员和用户」
  • 按需填写同意提示的显示名、描述信息
  • 保存后得到完整的作用域值:api://2f0d9252-e207-4d7f-b4da-********/access_as_user
  1. 修改请求令牌时的scopes参数
    你当前的scopes为空数组,会默认申请Microsoft Graph的基础权限,修改LoginAzure接口中的scopes定义:
// 替换原来的空scopes定义
string[] scopes = new string[] { "api://2f0d9252-e207-4d7f-b4da-********/access_as_user" };
  1. 校验令牌有效性(可选)
    可以将获取到的令牌复制到JWT解码工具中,确认两个核心声明:
  • aud(受众)值为你自己的API ClientId,而非Graph的地址
  • scp(权限)值包含你刚才定义的access_as_user

额外注意事项

当前你在后端接口中发起交互式MSAL登录的写法仅适合本地测试,生产环境不要使用该逻辑:后端API属于资源服务,不应该承担客户端登录的职责,正常架构应该由前端使用MSAL.js等客户端SDK发起交互式登录获取令牌,再携带令牌请求后端API。

内容的提问来源于stack exchange,提问作者Anthony Earl R. Cuartero

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 21:15:07