Azure AAD App ObjectId和ApplicationId有什么区别?

时间:2019-04-08 23:17:35

标签: azure azure-active-directory

AzureAAD App ObjectId和ApplicationId之间有什么区别,是否有特定的原因使两者都暴露给用户?是否存在用例上绝对需要ApplicationId上需要ObjectId的情况?

2 个答案:

答案 0 :(得分:3)

Azure AD中的应用程序注册会导致一个 Application 对象。 Azure AD中的所有对象都有一个对象ID。当您发出API请求以寻址特定的 Application 对象时,应使用对象ID:

GET https://graph.windows.net/{tenant-id}/applications/{object-id}?api-version=1.6

Application 对象的对象ID仅与注册该应用程序的同一租户相关,并且仅用于标识该对象。

Application 对象的appId属性在租户中使用,并且在多个对象类型上使用。有两个主要用途:

  1. 要通过各种登录和令牌流程(例如OAuth 2.0和OpenID Connect中的client_id)来标识应用。
  2. 唯一标识 ServicePrincipal 对象的支持 Application 对象。 (将 ServicePrincipal 对象视为给定Azure AD租户中应用程序的“实例”。)

答案 1 :(得分:1)

应用ID

ApplicationId对于表示该应用程序的单个应用程序对象将是相同的,并且对于为此应用程序创建的所有服务主体也将相同。

对象ID

ObjectId将是应用程序对象和每个服务主体的唯一值。这可以唯一标识Azure AD中的对象。您将在所有Azure AD对象中找到该属性,甚至包括用户,组或任何其他具有Azure AD的对象

  1. 是否有两个原因都可以向用户公开?
  2. 是否存在用例上肯定需要ObjectId而不是ApplicationId?

是的,原因有很多。假设,您需要使用service principal了解应用程序的Microsoft Graph API。您不能直接调用它。

为此,您需要在响应中包含resourceId,是为其进行分配的目标资源(服务主体)的object id

然后调用GET https://graph.microsoft.com/beta/servicePrincipals/,响应中的appId是AD App的application id

然后调用GET https://graph.microsoft.com/beta/applications,响应中的appId与GET https://graph.microsoft.com/beta/servicePrincipals/重新调整的appId相同。然后,您可以匹配它们。

这就是为什么您需要公开ApplicationIdObjectId的原因。像这样,您需要这些ID的原因很多。

您还可以参考提到的资源以进一步了解您的查询here

如果您还有任何问题,请随时在此处发表评论。谢谢。