多租户应用程序的 Azure AD Graph 对象 ID 每个租户都是唯一的,如何动态获取 servicePrincipal ID?

Azure AD Graph object ID of multi-tenant app is unique per tenant, how do I get the servicePrincipal ID dynamically?

我正在构建一个 AD 多租户应用程序,为了获取有关谁在其租户中分配了什么角色的数据,我需要查询需要服务主体 ID 的端点。这个 ID 每个租户都是唯一的,我正在尝试将其动态填充到 API link 中,只是不确定每个租户从哪里获得这个 ID。

我正在尝试查询的 API 端点:

https://graph.windows.net/{ tenantID }/servicePrincipals/{ 要插入的服务主体 ID }/appRoleAssignedTo?api-version=1.6

我整天都在查看文档,但我似乎找不到一种方法来以每个租户的动态方式获取它。

This ID is unique per tenant and I'm trying to fill it in the API link dynamically, just not sure where to get this per tenant.

您说得对,此服务主体 ID 对于每个租户都是唯一的。因此,查询它的方式将使用不会在所有租户之间改变的 属性。

正如您所说,它是一个多租户应用程序。所以你可以使用原始应用程序的"appId"。 AppId 属性 对于跨所有租户为此应用程序创建的所有服务主体都是相同的。

$filter=appId eq '{GUID appId for application}'

这是我在 Azure AD Graph Explorer 中测试的查询,api-version 在版本下拉列表中选择为 1.6

https://graph.windows.net/{tenantName or tenantID}/servicePrincipals?$filter=appId eq '{GUID appId for application}'  

所以这个查询可以在另一个查询之前执行,以获取特定租户的服务主体 ID,您可以将其传递到下一个查询,然后找到 AppRoleAssignments。

@Rohit 的回答有效并且是解决方案,但我只是想提供一个替代方案——这是我最终检索租户对象 ID 的方式。查询以下 api 端点:

https://graph.windows.net/myorganization/servicePrincipalsByAppId/
{ appId of the AD app }/objectId?api-version=1.6

应用ID将是在开发者AD组注册的主要多租户应用,在每个租户下始终相同。您还可以动态地从令牌中获取它作为名为 'aud' 的键的值,因此这将检索一个 JSON 对象,该对象将具有一个键 'value' ,其值将包含唯一的 servicePrincipal那个房客。