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

在Blazor Server(.NET6)中调用Office365 Graph API:获取authProvider

在Blazor Server(.NET 6)中使用Azure AD客户端凭据创建Graph AuthProvider

因为你不需要用户身份验证,而是用应用自身身份调用Graph API,所以要使用客户端凭据流来创建认证提供器(authProvider)。以下是具体实现步骤:

1. 安装必要的NuGet包

在项目中安装以下两个包:

  • Microsoft.Graph:用于调用Graph API
  • Microsoft.Identity.Client:用于处理Azure AD的客户端凭据认证

可以通过NuGet包管理器或者命令行安装:

Install-Package Microsoft.Graph
Install-Package Microsoft.Identity.Client

2. 创建ClientCredentialProvider实例(即authProvider)

直接使用你的Azure AD应用注册信息创建认证提供器,代码示例:

using Microsoft.Graph;
using Microsoft.Identity.Client;

// 从配置或安全存储中读取你的应用信息
var tenantId = "你的目录(租户)ID";
var clientId = "你的应用(客户端)ID";
var clientSecret = "你的客户端密钥值";

// 构建机密客户端应用
var confidentialClient = ConfidentialClientApplicationBuilder
    .Create(clientId)
    .WithAuthority($"https://login.microsoftonline.com/{tenantId}")
    .WithClientSecret(clientSecret)
    .Build();

// 创建客户端凭据认证提供器
var authProvider = new ClientCredentialProvider(confidentialClient);

// 初始化GraphServiceClient并执行查询
var graphClient = new GraphServiceClient(authProvider);
var people = await graphClient.Users["jmathews4@dxc.com"].People
    .Request()
    .Top(200)
    .GetAsync();

3. Blazor Server中的最佳实践:注册为全局服务

为了避免重复创建实例,建议在Program.cs中将GraphServiceClient注册为单例服务,这样可以在组件中依赖注入使用:

var builder = WebApplication.CreateBuilder(args);

// 添加GraphServiceClient为单例服务
builder.Services.AddSingleton<GraphServiceClient>(serviceProvider =>
{
    var config = serviceProvider.GetRequiredService<IConfiguration>();
    
    var tenantId = config["AzureAd:TenantId"];
    var clientId = config["AzureAd:ClientId"];
    var clientSecret = config["AzureAd:ClientSecret"];

    var confidentialClient = ConfidentialClientApplicationBuilder
        .Create(clientId)
        .WithAuthority($"https://login.microsoftonline.com/{tenantId}")
        .WithClientSecret(clientSecret)
        .Build();

    var authProvider = new ClientCredentialProvider(confidentialClient);
    return new GraphServiceClient(authProvider);
});

// 其他服务注册...

var app = builder.Build();

// 中间件配置...

app.Run();

同时在appsettings.json中配置你的Azure AD信息:

{
  "AzureAd": {
    "TenantId": "你的租户ID",
    "ClientId": "你的客户端ID",
    "ClientSecret": "你的客户端密钥"
  }
}

关键注意事项

  • 确保在Azure AD应用注册中配置的是应用权限(而非委派权限),且该权限已经获得全局管理员的同意(接口/users/{user-id}/people需要User.Read.All或更高的应用权限)
  • 客户端密钥属于敏感信息,不要硬编码在代码中,建议使用Azure Key Vault管理生产环境的密钥
  • 若遇到权限错误,检查Azure AD应用的权限列表是否已添加对应权限,且完成了管理员同意

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 13:45:32