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

React JS开发MS Teams标签应用:如何获取用户租户ID而非应用租户ID

获取Teams标签应用中用户的租户ID(无需强制登录)

直接从Teams Context读取(最简方案)

Teams会自动为标签应用提供上下文数据,其中的userTenantId字段就是用户所属的租户ID——不管用户是本租户成员还是其他租户的访客,这个值都是用户自身的租户ID,而且不需要触发任何登录流程。

代码示例

import * as microsoftTeams from "@microsoft/teams-js";

// 初始化Teams SDK
microsoftTeams.initialize();

// 拉取上下文并提取用户租户ID
microsoftTeams.getContext((context) => {
  const userTenantId = context.userTenantId;
  if (userTenantId) {
    // 在这里使用用户租户ID
    console.log("用户租户ID:", userTenantId);
  } else {
    console.error("无法获取用户租户ID,请检查应用是否正确嵌入Teams");
  }
});

从SSO令牌的home_tenant_id字段提取

你之前拿到的SSO令牌里的tid是应用注册所在的租户ID(资源租户),而访客用户的自身租户ID存在令牌的home_tenant_id字段里。可以通过静默SSO请求获取包含该字段的令牌,不需要强制用户登录。

代码示例

import * as microsoftTeams from "@microsoft/teams-js";

microsoftTeams.initialize();

// 发起静默SSO请求,指定图形API资源以获取包含用户信息的令牌
microsoftTeams.authentication.getAuthToken({
  resources: ["https://graph.microsoft.com"],
  successCallback: (token) => {
    // 解码JWT令牌的payload部分
    const payload = JSON.parse(atob(token.split(".")[1]));
    const userHomeTenantId = payload.home_tenant_id;
    console.log("用户租户ID:", userHomeTenantId);
  },
  failureCallback: (err) => {
    console.error("获取SSO令牌失败:", err);
  }
});

注意点

  • 如果要支持访客用户,你的Azure应用注册必须配置为多租户。
  • 第一种方案不需要额外权限配置,优先推荐;第二种方案需要应用注册有基础权限(比如User.Read),但仍是静默流程,不会打断用户操作。

内容的提问来源于stack exchange,提问作者Wai Yan Hein

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 21:10:47