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

已配置Azure AD认证的React单页应用,如何调用受保护的Azure REST API?

解决React前端调用Azure AD保护的REST API问题

我刚好搞定了这个问题,结合你提到的参考内容,下面是亲测有效的修改步骤,能让你的纯前端React应用顺利调用受Azure AD保护的REST API:

第一步:确认Azure AD应用注册的权限配置

首先得确保你的前端应用有访问目标API的权限:

  • 登录Azure门户,找到你的前端应用注册,进入「API权限」页面
  • 点击「添加权限」,选择你部署的REST API对应的应用注册,添加委托权限(因为是前端用户发起的请求)
  • 最后点击「授予管理员同意」(如果是租户内部应用,这一步必须做,否则普通用户会权限不足)

第二步:更新前端的ADAL配置文件 (adalConfig.js)

关键是要把endpoints里的api值替换成你REST API的应用ID URI(不是API的客户端ID哦),这个值可以在API的应用注册「概述」页面找到。同时我们可以确保adalApiFetch的逻辑正确:

import { AuthenticationContext, adalFetch, withAdalLogin } from 'react-adal';

export const adalConfig = {
  tenant: 'mytenantguid',
  clientId: 'myappguid',
  endpoints: {
    // 替换成你的REST API的应用ID URI,比如 https://your-tenant.onmicrosoft.com/your-api-name
    api: 'https://your-tenant-name.onmicrosoft.com/your-api-app-id',
  },
  cacheLocation: 'localStorage',
};

export const authContext = new AuthenticationContext(adalConfig);

// 封装API调用,自动附加AD令牌
export const adalApiFetch = (fetch, url, options) => {
  return adalFetch(authContext, adalConfig.endpoints.api, fetch, url, options);
};

export const withAdalLoginApi = withAdalLogin(authContext, adalConfig.endpoints.api);

第三步:在组件中调用受保护的API

在需要调用API的组件里,用我们封装的adalApiFetch代替原生fetch,它会自动从ADAL的缓存中获取有效的访问令牌,并把令牌附加到请求的Authorization头里:

import { adalApiFetch } from './adalConfig';

// 示例:获取API数据的函数
const fetchProtectedData = async () => {
  try {
    const response = await adalApiFetch(fetch, 'https://your-api-webapp.azurewebsites.net/api/your-endpoint', {
      method: 'GET',
      headers: {
        'Content-Type': 'application/json',
      },
    });
    
    if (!response.ok) {
      throw new Error(`API请求失败: ${response.status}`);
    }
    
    const data = await response.json();
    console.log('获取到API数据:', data);
    // 这里可以处理数据,比如更新Redux状态或者渲染到页面
  } catch (error) {
    console.error('调用API出错:', error);
    // 处理错误,比如提示用户重新登录
  }
};

第四步:验证API端的配置

确保你的REST API已经正确配置Azure AD认证,比如ASP.NET Core的API需要在Program.cs里添加类似这样的代码:

builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApi(builder.Configuration.GetSection("AzureAd"));

并且appsettings.json里的Azure AD配置指向正确的租户和API应用ID。

这样修改后,你的React应用在用户完成Azure AD认证后,就能自动带上合法的令牌调用受保护的API了,ADAL会帮你处理令牌的获取、缓存和自动刷新,不用手动管理令牌逻辑~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:35:58