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

使用Microsoft Graph REST API v1.0访问Azure B2C租户用户遇错求助

解决Azure AD B2C应用的unsupported_response_type错误并获取用户信息

先搞定你遇到的AADSTS700054错误,这个问题根源是Azure AD B2C应用的配置逻辑和普通AAD应用不一样,再加上原示例代码没适配B2C的规则,咱们一步步来:

1. 修复unsupported_response_type错误

调整Azure B2C应用的身份验证配置

  • 登录Azure门户,找到你的B2C租户,进入应用注册里的目标应用
  • 切换到身份验证页面,在平台配置下找到你添加的Web平台(如果没有就新建一个)
  • 确保在允许的令牌类型里勾选了ID令牌(用于隐式混合流);如果你的场景需要授权码流(更安全),还要额外勾选访问令牌
  • 确认回复URL和你项目里配置的完全一致,比如https://localhost:xxxx/signin-oidc

修改项目配置适配B2C

原示例是为Azure AD设计的,换成B2C需要调整appsettings.json和代码细节:

  • 在appsettings.json里,把Authority改成B2C的策略端点,格式如下:
    "Authority": "https://{你的B2C租户名}.b2clogin.com/{你的B2C租户名}.onmicrosoft.com/{你的注册登录策略名}/v2.0/"
    
  • 调整ResponseType:如果用隐式流可以设为id_token,更推荐用授权码流(安全度更高),设为code id_token
  • 确认ClientId和ClientSecret是你B2C应用的对应值,别和AAD应用的搞混

2. 获取Azure B2C用户信息(包括Gmail等外部账号)

要获取B2C用户数据,需要通过Microsoft Graph API调用,步骤如下:

配置应用权限

  • 在你的B2C应用注册页面,切换到API权限
  • 点击添加权限 -> 选择Microsoft Graph -> 选择应用权限
  • 添加User.Read.All(只读用户基本信息)或者Directory.Read.All(权限更大,可读取目录级数据)权限
  • 点击授予管理员同意(必须操作,因为是应用级权限,不需要用户手动授权)

在代码中调用Graph API获取用户

你可以用Microsoft Graph SDK简化调用流程:

  1. 安装必要的NuGet包:Install-Package Microsoft.Graph 和 Install-Package Microsoft.Graph.Auth
  2. 使用客户端凭据流获取访问令牌,然后调用用户列表接口:
    var scopes = new[] { "https://graph.microsoft.com/.default" };
    var clientSecretCredential = new ClientSecretCredential(
        "{你的B2C租户ID}",
        "{你的应用ClientId}",
        "{你的应用ClientSecret}",
        new ClientSecretCredentialOptions { AuthorityHost = AzureAuthorityHosts.AzureCloud });
    
    var graphClient = new GraphServiceClient(clientSecretCredential, scopes);
    var users = await graphClient.Users.Request().GetAsync();
    
    // 遍历用户,提取外部身份信息(比如Gmail账号)
    foreach (var user in users)
    {
        // B2C用户的外部身份存放在Identities属性中
        var externalIdentities = user.Identities?.Where(i => i.SignInType != "userPrincipalName");
        foreach (var identity in externalIdentities)
        {
            Console.WriteLine($"外部登录账号:{identity.IssuerAssignedId},来源平台:{identity.Issuer}");
        }
    }
    

关键注意事项

  • B2C外部用户的userPrincipalName可能不是常规邮箱格式,所以必须通过Identities属性获取他们的实际登录账号(比如Gmail地址)
  • 确保你的B2C租户允许应用通过Graph API访问用户数据,部分租户可能需要额外开启目录访问权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:21:40