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

时间:2018-12-10 14:47:29

标签: azure azure-active-directory azure-ad-graph-api

我正在构建一个AD多租户应用程序,为了获取有关谁在其租户中分配了哪些角色的数据,我需要查询需要服务主体ID的终结点。该ID每个租户都是唯一的,我试图动态地将其填充到API链接中,只是不确定从何处获取每个租户。

我要查询的API端点:

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

我整天都在浏览文档,但是我似乎找不到一种以每个租户动态方式获取文件的方法。

2 个答案:

答案 0 :(得分:1)

  

该ID每个租户都是唯一的,我正在尝试在API链接中填写该ID   动态地,只是不确定每个租户从何处获得该钱。

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

答案 1 :(得分:0)

@Rohit的答案是可行的并且是解决方案,但是我只想提供一种替代方法-这就是我最终检索该租户对象ID的方式。查询以下api端点:

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

应用程序ID将是在开发者的广告组中注册的主要多租户应用程序,在每个租户下始终相同。您还可以动态地从令牌中获取它作为称为“ aud”的键的值,这样它将检索一个具有键“ value”的JSON对象,其值将包含该租户下的唯一servicePrincipal。

相关问题