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_
相关产品推荐
相关产品推荐

