在Blazor Server(.NET6)中调用Office365 Graph API:获取authProvider
在Blazor Server(.NET 6)中使用Azure AD客户端凭据创建Graph AuthProvider
因为你不需要用户身份验证,而是用应用自身身份调用Graph API,所以要使用客户端凭据流来创建认证提供器(authProvider)。以下是具体实现步骤:
1. 安装必要的NuGet包
在项目中安装以下两个包:
Microsoft.Graph:用于调用Graph APIMicrosoft.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
相关产品推荐
相关产品推荐

