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

Yit*_*tuo 4 azure azure-active-directory

AzureAAD App ObjectId 和 ApplicationId 有什么区别,两者都暴露给用户有什么具体原因吗?是否有一个用例肯定需要 ObjectId 而不是 ApplicationId?

Phi*_*ret 8

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

GET https://graph.windows.net/{tenant-id}/applications/{object-id}?api-version=1.6
Run Code Online (Sandbox Code Playgroud)

一个应用对象的对象ID只有在应用程序注册相同的租有关,且永远只能用来识别对象。

一个应用程序对象的appId属性被用于跨租户使用,并且在一个以上的对象类型。有两个主要用途:

  1. 在各种登录和令牌流中识别应用程序(例如client_id在 OAuth 2.0 和 OpenID Connect 中)。
  2. 唯一地标识该背衬应用一个的对象ServicePrincipal对象。(将ServicePrincipal对象视为给定 Azure AD 租户中应用程序的“实例”。)


Md *_*ron 6

应用程序编号

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

对象 ID

ObjectId将是应用程序对象和每个服务主体的唯一值。这唯一标识了 Azure AD 中的对象。这是所有 Azure AD 对象的属性,例如用户、组或任何其他 Azure AD 对象

  1. 两者都暴露给用户是否有特定原因?
  2. 是否有一个用例肯定需要 ObjectId 而不是 ApplicationId?

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

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

然后调用 GET https://graph.microsoft.com/beta/servicePrincipals/appId响应中的就是application idAD App 的。

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

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

您还可以参考提到的资源,以在此处对您的查询有更多了解

如果您还有任何问题,请随时在评论中提出。谢谢你。