如何在ASP.NET Core Web应用中创建Microsoft Graph客户端?
解决方法
在已启用Entra ID身份验证的ASP.NET Core Web应用中,推荐使用Microsoft.Identity.Web集成Microsoft Graph SDK的方式创建GraphServiceClient,这种方式无需手动处理令牌获取,且符合当前官方推荐的最佳实践,不存在弃用或破坏性变更问题。
步骤1:安装必要的NuGet包
首先安装Microsoft.Identity.Web的Graph集成包:
Install-Package Microsoft.Identity.Web.MicrosoftGraph
步骤2:在Program.cs中配置Graph服务
在已有的身份验证配置之后,添加Graph服务的注册,关联当前的身份认证方案,并指定所需的Graph权限:
builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme) .AddInMemoryTokenCaches(); // 配置Microsoft Graph服务,自动使用当前用户的身份令牌 builder.Services.AddMicrosoftGraph(options => { // 替换为你实际需要的Graph权限,这里是创建在线会议所需的权限 options.Scopes = "OnlineMeetings.ReadWrite"; });
如果需要指定Graph API版本或其他自定义配置,可以扩展设置:
builder.Services.AddMicrosoftGraph(options => { options.Scopes = "OnlineMeetings.ReadWrite"; options.BaseUrl = "https://graph.microsoft.com/v1.0"; // 指定API版本 });
步骤3:注入并使用GraphServiceClient
在控制器或业务服务中直接注入GraphServiceClient,即可在用户认证上下文下调用Graph API:
public class MeetingController : Controller { private readonly GraphServiceClient _graphClient; // 通过构造函数注入GraphServiceClient public MeetingController(GraphServiceClient graphClient) { _graphClient = graphClient; } public async Task<IActionResult> CreateDemoMeeting() { // 确保用户已完成身份验证 if (!User.Identity.IsAuthenticated) { return Challenge(); } var meeting = new OnlineMeeting() { Subject = "demo meeting" }; var result = await _graphClient.Me.OnlineMeetings.PostAsync(meeting); return Ok(new { MeetingUrl = result.JoinWebUrl }); } }
注意事项
- 确保Azure应用注册中已添加Delegated类型的
OnlineMeetings.ReadWrite权限(因为调用/me端点需要用户上下文),且已完成管理员同意(如果是租户级应用)。 - 该方式会自动从当前用户的身份令牌缓存中获取Graph API的访问令牌,无需手动管理令牌生命周期。
内容的提问来源于stack exchange,提问作者g.pickardou
相关产品推荐
相关产品推荐

