首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Azure:服务主体ID与应用程序ID

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

Stack Overflow用户
提问于 2019-01-07 05:52:47
回答 1查看 19K关注 0票数 17

According to this documentation:应用程序和服务主体显然是两个不同的东西。应用程序是全局标识,服务主体是每个租户/AAD

This DocumentationThis Stack Overflow Question认为它们是一样的。

更令人困惑的是,当我使用Graph API (从第一个引用开始)并通过我的应用程序名进行查询时:

代码语言:javascript
复制
https://graph.windows.net/<tenantName>/applications?api-version=1.6&$filter=displayName eq '<Apllication Name>'

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-07 08:00:58

Short answer:应用程序和服务主体绝对是两个不同的东西(以一对多的方式相关,但绝对是不同的对象)。

使用Azure AD图形API的

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

代码语言:javascript
复制
https://graph.windows.net/<tenantName>/applications?api-version=1.6&$filter=displayName eq '<Apllication Name>'

查找服务主体

代码语言:javascript
复制
https://graph.windows.net/<tenantName>/servicePrincipals?api-version=1.6&$filter=displayName eq '<Apllication Name>'

在json中需要注意的小问题:

对于从上面提到的查询返回的应用程序对象和服务主体对象,

  1. objectIdobjectType将是不同的。由于与相同的逻辑application.

相关,

  • 属性(如appIddisplayName )是相同的

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

首先,问题中的链接是理解概念的一个很好的资源。我不会做比那个文档更好的工作来解释概念,所以如果需要的话,请多读一遍。不过,我将尝试突出显示一些信息来回答您的特定问题。

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

另一方面,服务主体(你在Azure Portal > Azure Active Directory的企业应用程序部分看到的)是将在每个想要使用此应用程序的Azure AD租户中创建的东西。对于"home“租户服务主体是在应用程序注册时创建的,对于所有其他租户来说,服务主体是在同意时创建的。

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

对于表示该应用程序的单个应用程序对象,

  • appId将是相同的,并且对于为该application.
  • objectId创建的所有服务主体也是相同的。对于应用程序对象和每个服务主体,它将是唯一值。这将唯一标识Azure AD中的对象。这是一个你可以在所有Azure AD对象中找到的属性,就像Azure AD.
  • clientId中的用户、组或任何其他对象都将与appId相同。它将与上下文相关,例如使用Azure AD支持的OAuth流之一获取令牌(例如,使用ADAL库编写代码或使用REST API访问Azure AD令牌端点)。它不是与应用程序或服务主体对象完全相同名称的直接属性。

顺便说一句,另外两个让你困惑的链接更多的是如何尝试完成工作的文章,而不是深入解释你正在寻找的概念。我不认为任何文档会明确地说应用程序和服务主体是一回事(因为它们在技术上是不同的)。尽管我可以理解,当应用程序和服务主体在与身份验证相关的任务上下文中松散地引用应用程序时,当应用程序和服务主体互换使用时,它有时会变得混乱。

这里是来自Jean-Marc Prieur的关于类似主题的another SO post的很好的答案。它可能不会回答所有特定的问题,但肯定会回答概念。

票数 29
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54066287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档