多租户下Teams侧载Bot识别安装租户的技术方案咨询
Teams机器人多租户场景解决方案
一、识别租户ID:直接从机器人活动提取
机器人接收的所有活动(包括应用安装到频道时触发的conversationUpdate事件)中,自带租户标识,无需额外认证:
- 开发时从活动对象中提取
conversation.tenantId字段(C#对应activity.Conversation.TenantId,Node.js对应activity.conversation.tenantId),该值为租户唯一ID,可直接用于区分不同客户组织。
二、多租户令牌获取方案
方案1:Application权限 + 应用包声明(推荐)
满足客户仅需安装授权的极简操作要求:
- 在Azure AD应用注册中添加所需的Application权限(如
Organization.Read.All),并将应用设置为多租户。 - 在Teams应用清单(
manifest.json)中,通过webApplicationInfo节点关联你的Azure AD应用ID,并在authorization.permissions.resourceSpecific中声明所需的Graph权限。 - 客户管理员安装应用包时,Teams会自动引导完成权限同意流程,无需登录Azure Portal手动配置。
- 使用Client Credentials Flow获取Graph令牌:
拿到令牌后即可调用Graph API,适配多租户场景。POST https://login.microsoftonline.com/{tenantId}/oauth2/v2.0/token Content-Type: application/x-www-form-urlencoded client_id={your-app-id}&scope=https://graph.microsoft.com/.default&client_secret={your-app-secret}&grant_type=client_credentials
方案2:Delegated权限适配频道场景
若需使用Delegated权限,可利用机器人的系统身份:
- 在Azure AD应用注册中添加所需Delegated权限(如
Organization.Read.All),设置应用为多租户,并在应用清单中声明权限,让管理员安装时完成同意。 - 从机器人活动中获取机器人的身份令牌,通过On-Behalf-Of流程请求Graph令牌:
此方式无需用户交互,适配频道/团队等非一对一聊天场景。POST https://login.microsoftonline.com/{tenantId}/oauth2/v2.0/token Content-Type: application/x-www-form-urlencoded grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&client_id={your-app-id}&client_secret={your-app-secret}&assertion={bot-id-token}&scope=https://graph.microsoft.com/Organization.Read.All&requested_token_use=on_behalf_of
三、获取组织名称的多租户适配
通过Graph API直接获取,无需额外适配:
- 调用
GET https://graph.microsoft.com/v1.0/organization接口,响应中的displayName字段即为租户组织名称。 - 使用Client Credentials Flow时,令牌已绑定租户,直接调用接口即可;使用On-Behalf-Of流程时,令牌同样关联租户上下文,结果准确。
内容的提问来源于stack exchange,提问作者DRestivo
相关产品推荐
相关产品推荐

