【问题标题】:Is oid unique across all tenants in AAD?oid 在 AAD 中的所有租户中是否唯一?
【发布时间】:2018-11-18 15:46:42
【问题描述】:

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

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

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

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

谢谢!

【问题讨论】:

    标签: azure-active-directory


    【解决方案1】:

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

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

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

    1. Service principal entity reference in Azure AD Graph API

    2. Service principal entity reference in the beta version for Microsoft Graph API

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

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

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

    Application and service principal objects in Azure Active Directory

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多