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

调用Microsoft Graph API拉取认证方法时遇401未授权错误求助

解决Azure AD B2C用户调用Graph API获取认证方法时的401 Unauthorized问题

嘿,我来帮你排查这个问题~首先明确说:不是因为不支持应用权限导致的错误。你调用的是/me/authentication/methods端点,这个端点本身就需要用委托权限(因为是当前登录用户访问自己的信息),应用权限本来就不适用这里,而且你已经配置了正确的委托权限(UserAuthenticationMethod.Read、UserAuthenticationMethod.Read.All),所以权限配置这块是没问题的。

接下来我们梳理下最可能导致401的几个原因,以及对应的排查步骤:

1. 访问令牌的受众或权限不对

调用Graph API的令牌必须是专门针对Graph API的有效委托令牌,而你从B2C登录流程中直接拿到的令牌,默认是针对你的业务应用的,不是Graph API的。你需要做这两个检查:

  • 解码你的访问令牌(可以用jwt.ms工具),看aud(受众)字段是不是https://graph.microsoft.com,如果是你的应用client ID,那这个令牌不能用来调用Graph。
  • 检查scp字段里有没有包含UserAuthenticationMethod.Read(或者你需要的权限),没有的话说明获取令牌时的scope配置错了。

2. 获取Graph令牌的流程不正确

举个例子,如果你用MSAL库(比如MSAL.NET),你需要专门请求Graph API的权限范围,而不是只用登录时的ID令牌。正确的代码大概是这样的:

// 定义Graph API的权限范围
var graphScopes = new[] { "https://graph.microsoft.com/UserAuthenticationMethod.Read" };
// 从已登录的用户会话中静默获取Graph令牌
var result = await _msalClient.AcquireTokenSilent(graphScopes, GetCurrentUserAccount())
                             .ExecuteAsync();
// 用这个令牌去调用Graph API
var graphClient = new GraphServiceClient(new DelegateAuthenticationProvider((requestMessage) => {
    requestMessage.Headers.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken);
    return Task.CompletedTask;
}));
var authMethods = await graphClient.Me.Authentication.Methods.Request().GetAsync();

核心就是:要单独获取针对Graph API的访问令牌,而不是复用登录业务应用时的令牌。

3. 权限同意的问题

虽然UserAuthenticationMethod.Read是用户可同意的权限,但如果你用的是UserAuthenticationMethod.Read.All,这个权限需要管理员同意。你可以去Azure门户的应用注册里,检查这些权限是否已经完成了同意操作(无论是用户同意还是管理员同意)。

4. B2C租户的Graph访问配置

确保你的应用注册是在Azure AD B2C租户下创建的,或者是多租户应用已经被B2C租户授权。另外,Beta端点(你用的https://graph.microsoft.com/beta)虽然可用,但要注意部分特性可能有兼容性限制,但这不是导致401的直接原因。

总结一下:你的权限配置是正确的,问题大概率出在获取的访问令牌不符合Graph API的要求,要么受众不对,要么权限范围没包含Graph的相关权限。先从解码令牌开始排查,应该能很快找到问题所在。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 13:02:34