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

Microsoft Graph API /common与/{{tenantId}}差异及权限问题解析

/common 与指定 {{tenantId}} 授权端点的差异解析

核心区别

1. 租户身份与应用定位

  • /common:多租户应用的通用登录入口,允许任何Azure AD租户的用户登录。用户登录时,系统会自动识别其所属租户,同时你的应用会以"多租户应用"的身份在该用户的租户中创建服务主体(首次登录时生成)。此时生成的访问令牌针对用户所在目标租户,权限边界也限定在该租户内。
  • /{{tenantId}}:指定租户的专属登录入口,仅允许该{{tenantId}}对应租户的用户登录。此时你的应用是以原创建租户(john@xyz.com所在租户)的外部应用身份访问目标租户资源,生成的令牌虽指向目标租户,但应用的权限仅来自原租户的配置——目标租户并未给这个外部应用授予任何访问权限。

2. 权限生效逻辑(结合你的问题)

你遇到的/users接口权限问题,核心原因就在这里:

  • 用/common时:
    你配置的委托权限会随用户身份传递到目标租户,只要当前登录用户本身拥有读取租户用户列表的权限(比如用户是目标租户的普通员工且有目录读取权限,或是管理员),就能成功调用/users。而/me和/groups本身是访问用户自身的信息和所属群组,属于用户默认拥有的权限范围,所以一直能正常调用。
  • 用/{{tenantId}}时:
    你的应用是原租户的外部应用,目标租户并未给它授予访问租户用户列表的权限。你在原租户配置的User.Read.All这类权限,只能访问原租户的用户数据,无法作用于目标租户。但/me和/groups是用户自身的资源,不需要应用拥有租户级权限,所以依然能正常调用。

3. 适用场景

  • /common:适合需要支持跨租户用户登录的SaaS类多租户应用。
  • /{{tenantId}}:适合仅允许特定租户用户登录的内部应用,或是应用仅需要访问原租户自身资源的场景。

内容的提问来源于stack exchange,提问作者Harsh Joshi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 15:43:27