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
相关产品推荐
相关产品推荐

