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

Azure active directory Azure:服务主体ID与应用程序ID,azure-active-directory,azure-ad-graph-api,azure-authentication,azure-security,Azure Active Directory,Azure Ad Graph Api,Azure Authentication,Azure Security,:应用程序和服务原则显然是两码事。应用程序是全局标识和服务主体 是每个租户/AAD 但我认为他们是一样的 为了让它更混乱,当我使用Graph API(来自第一个引用)并按我的应用程序名进行查询时: https://graph.windows.net/<tenantName>/applications?api-version=1.6&$filter=displayName eq '<Apllication Name>' https://graph.windows.

:应用程序和服务原则显然是两码事。应用程序是全局标识和服务主体 是每个租户/AAD

但我认为他们是一样的

为了让它更混乱,当我使用Graph API(来自第一个引用)并按我的应用程序名进行查询时:

https://graph.windows.net/<tenantName>/applications?api-version=1.6&$filter=displayName eq '<Apllication Name>'
https://graph.windows.net//applications?api-版本=1.6&$filter=displayName eq“”
我看到一个对象Id,一个应用程序Id(我认为是相同的),但Json中没有服务主体Id

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

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

使用Azure广告图API

寻找应用程序。正如你刚才提到的

https://graph.windows.net/<tenantName>/applications?api-version=1.6&$filter=displayName eq '<Apllication Name>'
https://graph.windows.net//applications?api-version=1.6&$filter=displayName eq',是理解概念的绝佳资源。在解释概念方面,我不会比文档做得更好,所以如果需要,一定要多读一遍。不过,我会尽量突出一些信息来回答您的具体问题

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

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

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

  • appId
    对于表示此应用程序的单个应用程序对象以及为此应用程序创建的所有服务主体都是相同的
  • objectId
    将是应用程序对象和每个服务主体的唯一值。这唯一地标识了Azure AD中的对象。这是一个属性,您可以在所有Azure AD对象中找到它,甚至可以在Azure AD中找到用户、组或任何其他对象
  • clientId
    将与
    appId
    相同。它将与上下文相关,例如使用Azure AD支持的OAuth流之一获取令牌(例如,在使用ADAL库编写代码或使用REST API访问Azure AD令牌端点时)。对于应用程序或服务主体对象,它不是一个具有该确切名称的直接属性
另一方面,让你困惑的另外两个链接更多的是关于如何完成工作的文章,而不是深入解释你正在寻找的概念。我认为任何文档都不会明确地说应用程序和服务主体是同一件事(因为从技术上讲它们不是)。虽然我可以理解,当在身份验证相关任务的上下文中松散地引用应用程序时,当应用程序和服务主体互换使用时,它有时会变得混乱


下面是一个类似的话题,有一个很好的答案。它可能不会回答您所有的具体问题,但肯定会触及概念

谢谢你的回答!特别是在谈论ObjectID时,如何查看SP Id等。因此,当通过RBAC/访问控制IAM Blade或Data Lake ACL访问Azure资源时,我们授予访问权限的是应用程序还是服务主体(因为两者具有相同的显示名?)我还可以无耻地向你指出我的另一个相关问题:@Gadam,非常欢迎你。我对Data Lake不是很熟悉,但根据我的一般理解,它将是特定Azure AD租户中的服务负责人。。我会检查你的其他问题,以及看看我是否可以提供任何帮助。这是伟大的。我正要问一个类似的问题@Rohistaigal因此,如果我做对了,在家庭租户中,应用程序和SP之间存在1:1的关系。只有当您有其他租户需要访问同一应用程序时,1:many才会生效。因此,在单租户应用程序的情况下,几乎可以同义使用术语application和sp。因此,我猜是混淆了。所以当我需要输入一个主体id时。例如,根据需要在这里创建新的角色分配。我使用appId还是objectId?
https://graph.windows.net/<tenantName>/servicePrincipals?api-version=1.6&$filter=displayName eq '<Apllication Name>'