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

ASP.NET Core 7 Web API调用Azure AD获令牌遇AADSTS65001授权错误求助

问题场景

ASP.NET Core 7.0 Web API使用Microsoft.IdentityModel.Clients.ActiveDirectory 5.3.0的AcquireTokenByUsernamePassword方法获取Azure AD令牌时,返回AADSTS65001错误,提示未获得应用权限同意,已完成API权限添加、身份验证配置、企业应用同意设置等操作,但问题仍存在。

具体解决线索

1. 确认API权限的同意状态

你在应用注册中添加了User.ReadWrite.All权限,但需区分权限类型并完成同意:

  • 若为应用权限:必须点击API权限页面的「授予管理员同意」按钮,确保权限状态显示「已授予」。
  • 若为委派权限:ROPC流不支持动态触发用户同意,需提前完成同意操作——要么管理员点击「授予管理员同意」批量授权,要么用户通过交互式登录流程完成一次同意。

2. 确保权限类型适配ROPC流

ROPC(Resource Owner Password Credentials)流仅支持委派权限,不支持应用权限。若你添加的是应用权限,需切换为委派权限后再完成同意。

3. 修正Authority配置错误

代码中domain取的是TokenEndpoint的值,这是错误的。WithAuthority需要传入Azure AD的权威地址,示例修正如下:

string clientId = Configuration.GetSection("ClientId").Value;
string tenantId = Configuration.GetSection("TenantId").Value;
string authority = $"https://login.microsoftonline.com/{tenantId}"; // 租户级权威地址
string[] scopes = { "User.ReadWrite.All" };

IPublicClientApplication app = PublicClientApplicationBuilder.Create(clientId)
    .WithAuthority(authority)
    .Build();

权威地址可选值:

  • 租户专属:https://login.microsoftonline.com/{tenant-id}
  • 所有Azure AD账户:https://login.microsoftonline.com/common
  • 组织账户:https://login.microsoftonline.com/organizations

4. 检查用户账号限制

  • ROPC流不支持开启**多因素认证(MFA)**的用户,若目标用户开启了MFA,需关闭或改用其他认证流。
  • ROPC流仅支持Azure AD本地账号,不支持外部账号、来宾账号。

5. 验证高权限委派权限的同意规则

User.ReadWrite.All属于高权限委派权限,默认要求管理员同意,即使你开启了用户同意设置也无法让普通用户自行授权。需由管理员完成「授予管理员同意」操作。

6. 临时用交互式登录完成同意

可临时添加一段交互式登录代码,让用户完成一次授权同意,之后ROPC流即可正常使用:

var result = await app.AcquireTokenInteractive(scopes).ExecuteAsync();

内容的提问来源于stack exchange,提问作者Shuaib

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 02:35:36