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

Teams应用开发:如何通过Teams SSO调用自定义API

解答:Teams应用调用自有Identity Server保护API的方案

针对你提出的三个疑问,结合多租户架构和现有Identity Server保护的API场景,逐一解答如下:

1. 能否直接将Teams令牌传给自有API,添加Microsoft为有效授权方?

理论上可以实现,但存在明显限制:

  • Teams SDK的microsoftTeams.authentication.getAuthToken()获取的令牌,受众(aud)是你的Teams应用对应的Entra ID应用ID,而非你的自有API。这意味着你的API需要调整验证逻辑,允许将该应用ID作为合法受众。
  • 该令牌仅包含openid、profile、email等基础身份声明,没有针对你API的权限范围(scope)或自定义授权声明。如果你的API需要基于权限做授权校验,这个令牌无法满足需求。
  • 多租户场景下,不同客户租户发行的令牌,其发行者(iss)格式为https://login.microsoftonline.com/{租户ID}/v2.0,你的API或Identity Server需要支持动态验证多租户的发行者,否则会出现验证失败。

如果你的API仅需做基础身份校验(确认用户是合法的Microsoft用户),可以尝试这种方式,但长期来看扩展性差,不推荐。

2. 是否需要使用On-behalf-of(OBO)流程?

OBO流程的核心是中间服务代表用户向下游受Entra ID保护的API请求令牌,但你的API目前由Identity Server保护,而非Entra ID,因此OBO流程并不适配你的现有架构:

  • 即使通过OBO流程生成了Entra ID颁发的令牌,你的API也无法识别验证该令牌(因为API只信任Identity Server)。
  • 若要使用OBO,你需要将API的身份验证方式切换为Entra ID保护,这会破坏现有统一的Identity Server认证体系,成本较高。

因此,OBO流程对你的场景不是必需选项。

3. 是否应将Teams令牌传给Identity Server,由其转换为API可识别的令牌?

这是最适配你现有架构的方案,推荐采用。具体逻辑是:利用Identity Server的**令牌交换(Token Exchange)**能力,将Teams颁发的令牌转换为你的API认可的令牌:

  1. 配置Identity Server信任Microsoft Entra ID为外部身份提供者,设置正确的令牌验证规则(包括多租户发行者、签名验证、受众校验等)。
  2. Teams前端/机器人通过getAuthToken()获取令牌后,调用Identity Server的令牌端点,使用urn:ietf:params:oauth:grant-type:jwt-bearer授权类型,将Teams令牌作为凭据,请求获取针对你的自有API的访问令牌。
  3. Identity Server验证Teams令牌的合法性后,颁发符合你API要求的令牌(包含所需的身份声明、权限范围等)。

这种方式的优势:

  • 保留现有Identity Server统一认证体系,无需修改API的验证逻辑。
  • 统一处理Teams、Copilot、内外部客户等多客户端的身份认证需求。
  • 可灵活扩展,后续新增权限或声明时,只需在Identity Server中配置即可。

额外建议

  • 确保你的Teams应用对应的Entra ID注册配置为多租户,并在令牌中请求必要的声明(如sub、email、name),方便Identity Server映射用户信息。
  • 在Identity Server中配置动态发行者验证,适配多租户场景下不同客户的令牌发行者。
  • 测试令牌交换全流程,验证Teams令牌的合法性校验、API令牌的生成及API的授权逻辑是否正常。

内容的提问来源于stack exchange,提问作者Guarav T.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 13:04:59