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

架构改造场景下,应使用哪种Azure AD应用注册认证流程?

解决方案说明

核心结论

你参考的SPA认证方案只完成了用户访问Web API的认证环节,本身不包含Web API调用MS Graph的配置,但可以基于这个方案扩展实现你的全部需求。

完整实现步骤

1. Azure AD应用注册配置

  • 前端SPA应用注册:
    • 配置SPA类型的重定向URI,指向前端登录后的回调地址
    • 添加委托权限:为Web API定义的自定义范围配置用户级委托权限,用于前端获取访问Web API的令牌
  • Web API应用注册:
    • 暴露API并定义自定义范围,供前端请求令牌时指定
    • 添加应用权限:为MS Graph配置所需的应用级权限(如User.Read.All、Mail.Read等),需管理员完成权限同意
    • 创建客户端密钥(或证书),作为Web API获取自身身份令牌的凭证
  • 权限授予:由Azure AD管理员对Web API的MS Graph应用权限执行管理员同意操作

2. 前端Vue SPA配置

  • 使用MSAL.js实现登录流程:
    • 初始化MSAL实例,配置Azure AD租户ID、SPA应用客户端ID
    • 实现登录按钮逻辑,触发跳转至Azure AD登录页面
    • 登录成功后获取访问令牌,后续请求Web API时在请求头中携带Authorization: Bearer {token}

3. ASP.NET Core Web API配置

  • 认证授权配置:
    • 在Program.cs中添加Azure AD认证,验证前端传入的令牌:
      builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
          .AddMicrosoftIdentityWebApi(builder.Configuration.GetSection("AzureAd"));
      
    • 启用认证和授权中间件:
      app.UseAuthentication();
      app.UseAuthorization();
      
  • MS Graph调用配置:
    • 添加MS Graph服务,基于应用身份认证:
      builder.Services.AddMicrosoftGraph()
          .AddAuthenticationProvider(options =>
          {
              options.ClientId = builder.Configuration["AzureAd:ClientId"];
              options.ClientSecret = builder.Configuration["AzureAd:ClientSecret"];
              options.TenantId = builder.Configuration["AzureAd:TenantId"];
              options.Scopes = new[] { "https://graph.microsoft.com/.default" };
          });
      
    • 在控制器中注入GraphServiceClient调用API:
      [Authorize]
      [ApiController]
      [Route("api/[controller]")]
      public class UsersController : ControllerBase
      {
          private readonly GraphServiceClient _graphClient;
      
          public UsersController(GraphServiceClient graphClient)
          {
              _graphClient = graphClient;
          }
      
          [HttpGet]
          public async Task<IActionResult> GetUsers()
          {
              var users = await _graphClient.Users.Request().GetAsync();
              return Ok(users);
          }
      }
      

4. 流程验证

用户访问前端登录页 → 点击登录跳转Azure AD → 登录成功返回前端并获取Web API访问令牌 → 前端携带令牌请求Web API → Web API验证令牌通过后,使用自身应用身份令牌调用MS Graph → 将Graph结果返回给前端

关键注意点

  • Web API调用MS Graph使用应用权限,所有操作以应用身份执行,而非当前登录用户身份,需确保权限范围匹配业务需求
  • 应用权限必须经Azure AD管理员同意后才能生效,否则无法获取有效应用令牌
  • 前端令牌仅用于访问Web API,Web API调用Graph需单独获取应用身份令牌(上述配置中AddMicrosoftGraph会自动处理令牌的获取与缓存)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 08:10:12