Azure:服务主体ID与应用程序ID

时间:2019-01-06 21:52:47

标签: azure-active-directory azure-ad-graph-api azure-authentication azure-security

According to this documentation:应用程序和服务主体显然是两个不同的事物。应用程序是全局标识和服务主体 是根据租户/ AAD

但是This DocumentationThis Stack Overflow Question表示它们是相同的。

为了使其更加混乱,当我使用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)之间是什么关系? 谢谢。

1 个答案:

答案 0 :(得分:8)

简短的答案:应用程序和服务主体绝对是两个不同的事物(以1:许多方式关联,但对象绝对不同)。

使用Azure AD Graph 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. objectIdobjectType将有所不同。
  2. appIddisplayName之类的属性是相同的,因为它们与同一逻辑应用程序相关。

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

首先,问题Application and service principal objects in Azure Active Directory中的链接是理解概念的好资源。在解释概念方面,我所做的工作不会比该文档更好,因此,如果需要,请仔细阅读一遍。我将尝试突出显示一些信息来回答您的特定查询。

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

另一方面,

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

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

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

另一方面,使您感到困惑的其他两个链接更多是“如何撰写文章以尝试完成工作”,而不是深入解释您要寻找的概念。我认为任何文档都不会明确指出应用程序和服务主体是同一件事(因为从技术上讲它们不是)。尽管我可以理解它有时会引起混淆,但是当在与身份验证相关的任务的上下文中松散地引用应用程序时,当应用程序和服务主体可互换使用时。

此处another SO post涉及类似主题,Jean-Marc Prieur得到了很好的回答。它可能无法回答您所有的特定查询,但肯定符合概念。