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

如何从被SPA调用的ASP.NET Core Web API调用Microsoft Graph API

问题背景

我有一个Angular SPA和ASP.NET Core Web API后端,已经给SPA配置了Azure应用注册,能通过@azure/msal-angular和@microsoft/microsoft-graph-client直接从SPA调用Graph API。现在想调整为:SPA调用Web API,再由Web API代表登录用户调用Graph API。核心疑问是:需要给SPA和Web API分别创建应用注册,还是只用单个应用注册配置两个平台?


已验证可用的实现方案

应用注册配置

需要为SPA和ASP.NET Core Web API分别创建独立的应用注册,配置方式如下:

  • 在Web API的应用注册中,进入「公开API」->「授权的客户端应用」,添加SPA的应用注册(无需在SPA的应用注册API权限中添加Web API权限,当前配置即可生效,暂不清楚两种配置方式的区别)

Web API配置细节

appsettings.json 配置

"AzureAd": {
  "Instance": "https://login.microsoftonline.com/",
  "ClientId": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
  "TenantId": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
  "ClientSecret": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "Scopes": "Api.Access"
}

无需额外配置Graph API相关项,默认配置即可正常工作。

Program.cs 配置(依赖Microsoft.Identity.Web.MicrosoftGraph 3.5.0)

// Using Microsoft.Identity.Web.MicrosoftGraph 3.5.0
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
   .AddMicrosoftIdentityWebApi(builder.Configuration)
   .EnableTokenAcquisitionToCallDownstreamApi()
   .AddMicrosoftGraph()
   .AddDistributedTokenCaches();

默认配置全部可用,无需额外修改。

控制器示例代码

[Route("api/[controller]")]
[ApiController]
[Authorize]
public class GraphTestController : ControllerBase
{
   public readonly GraphServiceClient _graphClient;

   public GraphTestController(GraphServiceClient graphClient)
   {
      _graphClient = graphClient;
   }

   [HttpGet("invite-user")]
   public async Task<ActionResult> InviteUser(string email, string displayName)
   {
      var invite = new Invitation()
      {
         InvitedUserDisplayName = displayName,
         InvitedUserEmailAddress = email,
         InviteRedirectUrl = "https://www.google.com",
         SendInvitationMessage = true
      };
      Invitation response = await _graphClient.Invitations.PostAsync(invite);
      return Ok(response);
   }
}

权限要求

要实现发送邀请的功能,需要在SPA和Web API的应用注册中都添加User.Invite.All委托权限,同时发起请求的用户需要具备足够的权限。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 00:49:59