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

基于Azure的前后端Microsoft AD身份认证实现方案咨询

解决Azure App Service后端AD认证下的前端API调用问题

核心逻辑

后端启用Microsoft AD认证后,会拦截所有未携带有效OAuth 2.0访问令牌的请求。令牌必须包含后端AD应用的权限范围,且受众(aud声明)需匹配后端应用的Client ID,后端才会验证通过并放行。

前端需发送的内容与传递方式

  • 必填内容:从Microsoft Identity Platform获取的、针对后端AD应用的JWT格式访问令牌
  • 传递方式:通过HTTP请求的Authorization请求头传递,格式为 Bearer <你的访问令牌>

Node.js + Axios 具体实现

1. 获取访问令牌

使用@azure/msal-node库完成用户登录并获取目标令牌(以授权码流为例,适配前后端分离场景):

const { PublicClientApplication } = require('@azure/msal-node');

// 前端AD应用配置
const msalConfig = {
  auth: {
    clientId: '<前端应用的Client ID>',
    authority: 'https://login.microsoftonline.com/<你的租户ID>',
  }
};

const pca = new PublicClientApplication(msalConfig);

async function getBackendAccessToken() {
  const tokenRequest = {
    // 后端应用的权限范围,格式为api://<后端Client ID>/<权限名称>(比如user_impersonation)
    scopes: ['api://<后端应用的Client ID>/user_impersonation'],
    code: '<用户登录后返回的授权码>',
    redirectUri: '<前端应用的回调地址>'
  };

  const tokenResponse = await pca.acquireTokenByCode(tokenRequest);
  return tokenResponse.accessToken;
}

2. Axios请求携带令牌

拿到令牌后,在API调用中添加Authorization头:

const axios = require('axios');

async function callProtectedBackendApi() {
  const accessToken = await getBackendAccessToken();
  try {
    const response = await axios.get('<后端API的完整地址>', {
      headers: {
        'Authorization': `Bearer ${accessToken}`
      }
    });
    console.log('API返回结果:', response.data);
  } catch (error) {
    console.error('调用失败:', error.response?.data || error.message);
  }
}

关键配置检查点

  • 前端AD应用已在Azure AD中添加对后端应用的API权限,并完成管理员同意
  • 令牌请求的scopes参数必须与后端应用暴露的权限一致
  • 后端应用的认证设置中,已将前端应用添加为允许的客户端(或启用“允许所有组织账户”)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 00:49:01