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

问题描述 投票:3回答:2

我正在构建一个AD多租户应用程序,为了获取有关谁被分配到租户中的哪个角色的数据,我需要查询需要服务主体ID的端点。这个ID对于每个租户来说都是唯一的,我正在尝试动态地填充它在API链接中,只是不确定每个租户的位置。

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

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

我一整天都在查看文档,但我似乎无法找到一种方法来让每个租户以动态的方式获得这些文档。

azure azure-active-directory azure-ad-graph-api
2个回答
1
投票

这个ID对于每个租户来说都是唯一的,我正在尝试动态地填充它在API链接中,只是不确定每个租户的位置。

您是正确的,这个服务主体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。


0
投票

@ 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。

© www.soinside.com 2019 - 2024. All rights reserved.