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

Blazor Server集成Azure B2C后连接Graph API获取Outlook邮件的租户ID问题

Blazor Server + Azure B2C 连接 Microsoft Graph API 解决方案(含租户ID问题处理)

1. 正确获取Azure B2C租户ID

  • 登录Azure门户,进入你的Azure B2C租户,在「概述」页面直接复制显示的「租户ID」
  • 或使用Azure CLI命令获取:az b2c tenant show --name <你的B2C租户域名(如xxx.onmicrosoft.com)> --query id -o tsv

2. 配置Azure B2C应用注册

2.1 添加Graph API委派权限

  • 进入对应应用注册的「API权限」>「添加权限」
  • 搜索「Microsoft Graph」,选择「委派权限」,添加Mail.Read/Mail.ReadWrite(按需选择)
  • 点击「授予管理员同意」(需租户管理员权限)

2.2 调整身份验证设置

  • 在「身份验证」页面,确认已添加Blazor Server的重定向URI(格式通常为https://<你的域名>/signin-oidc)
  • 勾选「ID令牌」和「访问令牌」,确保能获取调用Graph所需的令牌

3. Blazor Server代码配置与调用

3.1 配置appsettings.json

确保参数准确:

"AzureAdB2C": {
  "Instance": "https://<你的B2C租户名称>.b2clogin.com/",
  "Domain": "<你的B2C租户域名>",
  "TenantId": "<复制的租户ID>",
  "ClientId": "<应用注册客户端ID>",
  "ClientSecret": "<应用注册客户端密钥>",
  "SignUpSignInPolicyId": "<你的用户流名称,如B2C_1_signup_signin>",
  "Scopes": "https://graph.microsoft.com/Mail.Read"
}

3.2 注册Graph服务与认证中间件

在Program.cs中添加:

// 配置Microsoft Graph服务
builder.Services.AddMicrosoftGraph(options =>
{
    options.Scopes = builder.Configuration["AzureAdB2C:Scopes"];
});

// 配置Azure B2C认证并启用下游API令牌获取
builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApp(builder.Configuration.GetSection("AzureAdB2C"))
    .EnableTokenAcquisitionToCallDownstreamApi()
    .AddMicrosoftGraph(builder.Configuration.GetSection("AzureAdB2C"))
    .AddInMemoryTokenCaches();

3.3 在Blazor组件中调用Graph API

@inject GraphServiceClient GraphClient
@if (mails != null)
{
    <ul>
        @foreach (var mail in mails)
        {
            <li>@mail.Subject - @mail.From?.EmailAddress?.Name</li>
        }
    </ul>
}

@code {
    private List<Message> mails;

    protected override async Task OnInitializedAsync()
    {
        try
        {
            // 获取当前用户的前10封邮件
            var mailPage = await GraphClient.Me.Messages.Request()
                .Top(10)
                .Select(m => new { m.Subject, m.From })
                .GetAsync();
            mails = mailPage.CurrentPage.ToList();
        }
        catch (Exception ex)
        {
            // 处理异常,如令牌无效、权限不足等
        }
    }
}

4. 排查要点

  • 检查TenantId是否完全匹配Azure门户中的值,避免拼写错误或空格
  • 确认Graph API权限已授予管理员同意,未授权会导致令牌获取失败
  • 验证应用注册的重定向URI与Blazor Server的实际地址一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 08:37:23