17

根据这个文档:应用程序和服务主体显然是两个不同的东西。应用程序是全局身份,服务主体是每个租户/AAD

但是这个文档这个堆栈溢出问题 表明它们是相同的。

为了使它更加混乱,当我使用 Graph API(来自第一个参考)并通过我的应用程序名称进行查询时:

https://graph.windows.net/<tenantName>/applications?api-version=1.6&$filter=displayName eq '<Apllication Name>'

我看到一个对象 ID、一个应用程序 ID(我认为它们是相同的),但在 Json 中没有服务主体 ID

AppID 和 ServicePrincipalID(以及 ClientID、ObjectID)是什么关系?谢谢。

4

1 回答 1

29

简短回答:应用程序和服务主体绝对是两个不同的东西(以 1:many 方式相关,但绝对是不同的对象)。

使用 Azure AD 图形 API

寻找应用。正如你已经提到的问题。

https://graph.windows.net/<tenantName>/applications?api-version=1.6&$filter=displayName eq '<Apllication Name>'

寻找服务负责人

https://graph.windows.net/<tenantName>/servicePrincipals?api-version=1.6&$filter=displayName eq '<Apllication Name>'

json 中需要注意的小事:

  1. objectId您从上述查询中返回的应用程序对象和objectType服务主体对象将有所不同。
  2. appId类似和的属性displayName是相同的,因为它们与相同的逻辑应用程序相关。

您的问题 - AppID 和 ServicePrincipalID(以及 ClientID、ObjectID)之间的关系是什么

首先,您的问题Application and service principal objects in Azure Active Directory中的链接是理解概念的绝佳资源。在解释概念方面,我不会比那个文档做得更好,所以如果需要,请多读一遍。不过,我会尝试强调一些信息来回答您的具体问题。

您可以将您从上面的 Azure AD Graph API 检索到的应用程序对象(或参见 Azure 门户 > Azure Active Directory 的应用程序注册部分)视为您正在开发和向 Azure 注册的软件应用程序的单一和主要定义出于身份目的的广告。注意:对于多租户应用程序,您只能在“主”租户中找到此应用程序对象,其中应用程序已向 Azure AD 注册。

另一方面,服务主体(您在 Azure 门户 > Azure Active Directory 的企业应用程序部分看到的内容)将在每个想要使用此应用程序的 Azure AD 租户中创建。对于“家庭”租户,服务主体是在应用注册时创建的,对于所有其他租户,服务主体是在同意时创建的。

所以总是只有 1 个应用程序对象来表示应用程序。在应用注册时将至少创建 1 个服务主体。虽然,当您开始使用来自多个租户的多租户应用程序时,将为每个用户同意应用程序的新 Azure AD 租户创建一个服务主体。因此应用程序和服务主体对象之间的关系变为 1:many

  • appId对于代表此应用程序的单个应用程序对象将是相同的,对于为此应用程序创建的所有服务主体也将是相同的。
  • objectId将是应用程序对象和每个服务主体的唯一值。这唯一地标识了 Azure AD 中的对象。它是所有 Azure AD 对象(甚至是用户、组或其他任何 Azure AD 对象)的属性。
  • clientId将与 相同appId。它将与上下文相关,例如使用 Azure AD 支持的 OAuth 流之一获取令牌(例如,在使用 ADAL 库编写代码或使用 REST API 来访问 Azure AD 令牌端点时)。它不是应用程序或服务主体对象的确切名称的直接属性。

附带说明一下,使您感到困惑的其他两个链接更多的是如何尝试完成工作的文章,而不是深入解释您正在寻找的概念。我认为任何文档都不会明确说应用程序和服务主体是同一件事(因为它们在技术上不是)。虽然我可以理解它有时会让人感到困惑,但当在身份验证相关任务的上下文中松散地引用应用程序时,应用程序和服务主体可以互换使用。

这是关于类似主题的另一篇 SO 帖子, Jean-Marc Prieur 给出了很好的回答。它可能无法回答您的所有特定查询,但肯定会触及概念。

于 2019-01-07T00:00:57.833 回答