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

Azure App Service能否直接认证到AAD B2C租户?如何实现跨租户权限?

直接跨租户访问AAD B2C的Microsoft Graph API方案

你可以通过**Azure联合身份凭据(Federated Identity Credentials)**实现主AAD租户的Express服务直接认证访问B2C租户的Graph API,无需绕路Key Vault取私钥,这是当前跨租户服务身份认证的最佳实践。

核心实现步骤

1. 为主AAD租户的App Service配置托管身份

  • 若使用系统分配托管身份:在App Service的「身份」面板中启用「系统分配」身份,记录其客户端ID和对象ID。
  • 若使用用户分配托管身份:创建一个用户分配的托管身份,将其关联到App Service,同样记录客户端ID和对象ID。

2. 在B2C租户中配置信任与权限

  • 在B2C租户的Azure AD中注册一个新的应用(用于访问Graph API),记录该应用的应用ID。
  • 给这个B2C应用添加「联合身份凭据」:
    • 选择「受众类型」为「Azure AD租户」,填入主AAD租户的ID。
    • 填入主租户托管身份的对象ID或客户端ID,选择「颁发者」为https://sts.windows.net/{主租户ID}/。
  • 为B2C应用分配Microsoft Graph的应用权限(根据你需要执行的操作选择,比如Directory.ReadWrite.All、User.ReadWrite.All等),并由B2C租户的管理员授予管理员同意。

3. 在Express服务中直接获取Graph令牌

使用@azure/identity的ManagedIdentityCredential直接获取B2C Graph API的访问令牌,无需私钥:

const { ManagedIdentityCredential } = require("@azure/identity");
const { Client } = require("@microsoft/microsoft-graph-client");
const { TokenCredentialAuthenticationProvider } = require("@microsoft/microsoft-graph-client/authProviders/azureTokenCredentials");

// 替换为你的B2C租户ID
const B2C_TENANT_ID = "your-b2c-tenant-id";
// Graph API的默认应用权限范围
const GRAPH_SCOPE = "https://graph.microsoft.com/.default";

// 初始化托管身份凭据
const credential = new ManagedIdentityCredential({
  tenantId: B2C_TENANT_ID,
  // 若使用用户分配托管身份,需指定其客户端ID
  // clientId: "user-assigned-managed-identity-client-id"
});

// 创建Graph客户端
const authProvider = new TokenCredentialAuthenticationProvider(credential, {
  scopes: [GRAPH_SCOPE]
});
const graphClient = Client.initWithMiddleware({ authProvider });

// 示例:查询B2C租户中的用户列表
async function fetchB2CUsers() {
  try {
    const response = await graphClient.api("/users").get();
    console.log("B2C用户列表:", response.value);
  } catch (err) {
    console.error("Graph API调用失败:", err);
  }
}

fetchB2CUsers();

方案优势

  • 无需管理任何私钥,彻底避免部署时的密钥同步问题。
  • 完全依赖Azure的托管身份和跨租户信任机制,安全性更高。
  • 代码逻辑简洁,直接完成从App Service到B2C Graph的认证与访问。

注意事项

  • 必须确保B2C租户的管理员已对应用权限授予管理员同意,否则会出现权限不足的错误。
  • 联合身份凭据的配置需要主租户托管身份的唯一标识(对象ID或客户端ID),确保填写正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 15:24:19