首页 > 解决方案 > oid 在 AAD 中的所有租户中是否唯一?

问题描述

您是否知道对于以下两种情况,AAD 访问令牌中的 oid 声明在 AAD 中的所有租户中是否保证是唯一的:

  1. 当它是代表用户的对象ID时;
  2. 当它是表示应用程序服务主体的对象 id 时。

我对案例 2 特别感兴趣,因为我想知道我是否可以依靠 AAD 应用程序令牌中的以下组合之一来识别和授权应用程序。您对我们应该使用哪种组合有一些建议:

  1. 孤独的;
  2. Oid + 应用 ID;
  3. Oid + appId + tid(租户 ID);
  4. 其他。

谢谢!

标签: azure-active-directory

解决方案


要回答您的第一个问题,oid 声明或 ObjectId 属性是不可变的并且是唯一的,因此它永远不应该改变以及唯一地标识相关的目录对象。

仅关于用户对象的 oid 声明的特别说明。如果单个用户存在于多个租户中,则用户将在每个租户中包含不同的对象 ID - 它们被视为不同的帐户,即使用户使用相同的凭据登录每个帐户也是如此.

以下是这部分的一些参考链接: 1.oid用户声明 - Azure AD 令牌参考

在此处输入图像描述

  1. Azure AD Graph API 中的服务主体实体引用

    在此处输入图像描述

  2. Microsoft Graph API 测试版中的服务主体实体参考

在第二个问题上,您没有提到太多关于您授权服务主体的方式或场景。通常对于多租户应用程序,在为特定租户完成同意过程之前,服务主体甚至不存在(唯一的例外是在应用程序注册时创建服务主体的家庭租户,所有其他租户需要明确的同意过程)。

假设同意过程已经完成,此租户的服务主体存在,并且您只是使用传入令牌中的声明授权/验证某些应用程序中的调用,那么查看 appid 和 tid 声明也是有意义的,只是为了使合乎逻辑了解这是哪个 Azure AD 应用程序,以及租户是否有效。因此,根据您的选择,这将是第三种组合。

如果您还没有遇到过,这里是多租户应用程序的应用程序/服务主体关系的好读物。

Azure Active Directory 中的应用程序和服务主体对象


推荐阅读