集成Teams的机器人服务应选用Teams ID还是AAD Object ID作为用户标识符?
关于Teams集成机器人用户唯一标识符选型的解答
二者变更风险对比
AAD Object ID是几乎不会变更的用户全局唯一标识,只要对应AAD账号在租户内未被删除重建,即使用户修改邮箱、UPN、显示名等属性,Object ID也会保持固定。
Teams ID(即从机器人活动上下文直接获取的user.id值)本质是AAD Object ID针对当前机器人的加密映射值,单租户单机器人场景下变更概率极低,但如果后续更换机器人应用注册信息、跨租户部署或微软后端规则调整,理论上的变更风险高于AAD Object ID。
各自优劣势对比
AAD Object ID作为唯一标识符的优劣势
- 优势
- 跨微软全生态通用,后续对接Office 365 Graph、SharePoint、Intune等服务时无需额外做ID映射
- 稳定性拉满,是微软官方认可的用户身份唯一标识,合规性更强
- 可直接用该ID调用所有Graph API获取用户属性、操作相关微软服务,无需转换
- 劣势
- 无法直接从Teams活动Payload中获取,需要额外调用Graph接口,或者从SSO返回的Token中解析,多了一步开发流程
- 如果服务仅做Teams机器人相关功能,无其他微软生态对接需求,通用性优势无法发挥
Teams ID作为唯一标识符的优劣势
- 优势
- 可以直接从每次Teams活动的
from.id字段直接提取,无需额外接口调用或Token解析,开发成本更低 - 单租户单机器人场景下,稳定性足以满足常规业务需求
- 可以直接从每次Teams活动的
- 劣势
- 仅适用于当前Teams机器人场景,跨应用、跨服务对接时都需要额外做ID映射,后续扩展成本高
- 机器人迁移、更换应用注册信息时,存在ID失效需要全量重新映射的风险
- 无法直接用该ID调用Graph API,每次调用都需要先转换为AAD Object ID
核心决策参考因素
- 业务扩展规划:如果确定未来仅保留Teams机器人相关功能,无其他微软生态对接需求,选Teams ID足够;如果有任何对接其他微软365服务、企业IAM系统的可能,直接选AAD Object ID更省心
- 部署模式:如果是多租户机器人,需要服务不同企业的用户,必须选「AAD Object ID + 租户ID」的组合作为唯一标识,跨租户场景下Teams ID兼容性极差
- 合规要求:如果系统需要做身份审计、数据溯源,AAD Object ID是企业IT部门可直接验证的合法身份标识,合规性远高于Teams ID
易忽略的注意事项
- 无论选哪个ID作为主键,都建议同步存储用户的UPN作为辅助标识,万一出现用户账号删除重建的极端情况,可以通过UPN做数据匹配修复
- 禁止用用户邮箱、显示名、手机号这类可修改属性作为唯一标识,哪怕已经选了上述两种ID之一,也不要把可变属性当做主键使用
- 如果已经启用了Teams SSO做身份验证,AAD Object ID会直接包含在SSO返回的ID Token中,无需额外调用接口,此时选AAD Object ID没有额外开发成本
- 如果涉及跨组织协作场景,只有AAD Object ID是对方企业IT可以校验的身份标识,Teams ID对方无法验证有效性
内容的提问来源于stack exchange,提问作者YKStacker
相关产品推荐
相关产品推荐

