使用图形API以编程方式将用户分配给Azure AD应用程序

问题描述:

我正在尝试编写一个脚本来使用Graph API将用户分配给Azure AD应用程序(servicePrincipal)。我正在测试这个在我的沙箱中,我已经定义了应用程序并为其分配了用户。但是,当我查询servicePrincipal时,我在响应中的任何地方都看不到用户。使用图形API以编程方式将用户分配给Azure AD应用程序

问题:基于documentation

  1. ,不应该有appRoleAssignment

  2. 该文档说这个字段是只读的,那么您应如何分配用户?

    https://graph.windows.net/tenant-id/users/user-id/appRoleAssignments?api-version=1.6 
    

    https://graph.windows.net/tenant-id/users/user-id/appRoleAssignments?api-version=1.6 
    

    您可以通过一个HTTP POST来创建任务:

您可以查询图形API时,通过导航属性获取用户的appRoleAssignments您需要发送的对象如下所示:

{ 
    "id": "id-of-role", 
    "principalId": "objectId-of-user", 
    "resourceId": "objectId-of-service-principal" 
} 

如果您的应用程序没有任何作用,但仍希望将用户分配,似乎你可以将ID设置为全零:

当资源不声明任何权限,一必须指定默认ID(零GUID)。

因此,像:

{ 
    "id":"00000000-0000-0000-0000-000000000000", 
    "resourceId": "a27d8321-3dc6-44a1-bf19-2546a9f2806e", 
    "principalId": "c4f810b8-2ea1-4580-9595-30275a28c2a2" 
} 
+0

非常感谢你。我试图看看是否可以使用更新的MSFT Graph API复制:https://developer.microsoft.com/en-us/graph/docs/api-reference/v1.0/resources/directoryobject,但这很好。 – babakh

+1

我正在努力与此。如果我从租户获取应用程序的对象ID或应用程序ID,我总是得到错误资源不存在 – Sentinel

+0

它是您需要的服务主体的对象ID,而不是应用程序。您可以在Azure门户的Azure AD刀片中的企业应用程序下找到服务主体。在它的属性中你会找到对象ID。 – juunas