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

Gad*_*dam 5 azure-active-directory azure-ad-graph-api azure-security azure-authentication

根据此文档:应用程序和服务主体显然是两个不同的事物。应用程序是全局标识,服务主体是每个租户/ AAD

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

为了使其更加混乱,当我使用Graph API(来自第一个参考文献)并按我的应用程序名称查询时:

https://graph.windows.net/<tenantName>/applications?api-version=1.6&$filter=displayName eq '<Apllication Name>'
Run Code Online (Sandbox Code Playgroud)

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

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

Roh*_*gal 10

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

使用Azure AD Graph API

查找应用程序。正如您已经提到的那样。

https://graph.windows.net/<tenantName>/applications?api-version=1.6&$filter=displayName eq '<Apllication Name>'
Run Code Online (Sandbox Code Playgroud)

寻找服务负责人

https://graph.windows.net/<tenantName>/servicePrincipals?api-version=1.6&$filter=displayName eq '<Apllication Name>'
Run Code Online (Sandbox Code Playgroud)

json中需要注意的小事情:

  1. objectIdobjectType会为应用对象和服务主体对象,你提到的查询上述取回不同。
  2. appIddisplayName这样的属性是相同的,因为它们与相同的逻辑应用程序相关。

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

首先,您的问题“ 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:许多

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

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

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