如何在Microsoft Teams中实现Tab与Bot的外部IDP SSO令牌共享?
解决方案:Teams Tab与Bot Framework的第三方IDP令牌共享
方案1:手动将Tab令牌存入Bot Framework Token Store
Tab端通过HTML SSO获取到第三方IDP的令牌后,将令牌传递给你的后端服务,由后端调用Bot Framework的Token Management API完成令牌存入:
- 后端需持有Bot的
Microsoft App ID和Microsoft App Password,用于API请求的身份验证 - 调用接口:
POST /api/usertokens/{userId}/tokens/{connectionName},其中:userId必须是Teams认可的用户唯一标识(Tab可通过Teams JS SDK的microsoftTeams.getContext()获取userObjectId或userPrincipalName)connectionName是你在Bot Framework Portal中配置的第三方IDP连接名称- 请求体需包含令牌核心信息:
access_token、expires_in、token_type等
- 存入完成后,Bot即可通过
GetUserTokenAsync方法从Token Store中读取该令牌
方案2:通过后端中转的临时凭证传递
若不想依赖Bot Framework的Token Store,可通过自定义后端实现令牌安全中转:
- Tab获取令牌后,将其存入你的后端系统,同时生成一个短期有效、一次性的临时凭证ID
- Tab触发Bot交互时,将这个临时凭证ID附加到消息的自定义属性中发送给Bot
- Bot收到消息后,携带自身身份凭证(如Bot App ID签名)调用你的后端,用临时凭证ID换取真实的access_token
- 后端验证请求来源为合法Bot后,返回令牌供Bot使用
方案3:让Bot复用Tab的SSO会话(推荐)
配置Bot使用与Tab完全一致的第三方IDP连接,实现会话复用:
- 在Bot Framework Portal中创建与Tab匹配的第三方IDP连接,确保权限范围、客户端ID等配置完全相同
- 当Bot需要访问第三方服务时,调用
GetUserTokenAsync方法:若Token Store中无对应令牌,Bot会自动发起SSO请求 - 由于用户已在Tab端完成SSO登录,Teams会自动复用现有身份会话,用户无需重复登录,Bot即可静默获取令牌并存入Token Store
关键注意事项
- 安全优先:禁止在前端直接传递access_token,所有令牌的传递、存储必须通过后端中转,避免泄露风险
- 用户标识统一:Tab与Bot使用的用户ID必须保持一致,确保Token Store中的令牌能正确关联到对应用户
- 权限范围匹配:Tab与Bot获取的令牌权限范围需覆盖各自业务需求,避免出现权限不足问题
内容的提问来源于stack exchange,提问作者Krisztian Jofoldi
相关产品推荐
相关产品推荐

