According to this documentation:应用程序和服务主体显然是两个不同的事物。应用程序是全局标识和服务主体 是根据租户/ AAD
但是This Documentation和This 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)之间是什么关系? 谢谢。
答案 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中需要注意的小事情:
objectId
和objectType
将有所不同。 appId
和displayName
之类的属性是相同的,因为它们与同一逻辑应用程序相关。您的问题-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的对象。clientId
与appId
相同。在上下文中这将是相关的,例如使用Azure AD支持的OAuth流程之一获取令牌(例如,在使用ADAL库编写代码或使用REST API达到Azure AD令牌端点时)。对于应用程序或服务主体对象,它不是具有该确切名称的直接属性。另一方面,使您感到困惑的其他两个链接更多是“如何撰写文章以尝试完成工作”,而不是深入解释您要寻找的概念。我认为任何文档都不会明确指出应用程序和服务主体是同一件事(因为从技术上讲它们不是)。尽管我可以理解它有时会引起混淆,但是当在与身份验证相关的任务的上下文中松散地引用应用程序时,当应用程序和服务主体可互换使用时。
此处another SO post涉及类似主题,Jean-Marc Prieur得到了很好的回答。它可能无法回答您所有的特定查询,但肯定符合概念。