带有Application.ReadWrite.OwnedBy的Azure AD应用程序无法向其创建的应用程序添加更多所有者

时间:2018-12-06 02:26:12

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

我有一个AAD应用程序,可以创建其他AAD应用程序。第一个应用程序(创建者)的权限为Application.ReadWrite.OwnedBy,并且能够更新其创建的应用程序的显示名称,但无法在这些应用程序上添加更多所有者。它需要更多特权吗?

HTTP请求更新已创建的应用的显示名称(成功):

PATCH https://graph.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47/applications/a1236923-6de6-4e78-87dd-494d621fc20c?api-version=1.6 HTTP/1.1
Authorization: Bearer eyJ0eXAi...
Content-Type: application/json; charset=utf-8
Host: graph.windows.net
Content-Length: 45
Expect: 100-continue

{
  "displayName": "test"
}

向创建的应用添加所有者的HTTP请求(失败):

POST https://graph.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47/applications/a1236923-6de6-4e78-87dd-494d621fc20c/$links/owners?api-version=1.6 HTTP/1.1
Authorization: Bearer eyJ0eXAi...
Content-Type: application/json; charset=utf-8
Host: graph.windows.net
Content-Length: 122
Expect: 100-continue

{
  "url": "https://graph.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47/users/ac990eb3-b25a-4e06-ade5-41c7613693ff"
}


HTTP/1.1 403 Forbidden
request-id: 9be47e62-abcd-4768-926f-ffd62544e696
client-request-id: 149115f6-c9b7-4dd4-a267-711a40c51f23
...

{"odata.error":{"code":"Authorization_RequestDenied","message":{"lang":"en","value":"Insufficient privileges to complete the operation."}}}

我验证了创建者应用在JWT Bearer令牌的role数组中确实具有Application.ReadWrite.OwnedBy

我还通过调用GET https://graph.windows.net/72f988bf-86f1-41af-91ab-2d7cd011db47/applications/a1236923-6de6-4e78-87dd-494d621fc20c/owners/64898a3a-2fb1-45f0-a514-e83fabbc01f2验证了创建者应用程序在创建的应用程序的所有者列表中。

2 个答案:

答案 0 :(得分:1)

根据您的错误消息,您没有足够的特权。据我所知,如果要将用户分配给具有Application特权的AAD应用程序,则需要具有以下特权:Application.ReadWrite.OwnedBy和Directory.Read.All,Application.ReadWrite.All和Directory.Read.All。

此外,Microsoft强烈建议您使用Microsoft Graph代替Azure AD Graph API来访问Azure Active Directory资源。有关更多详细信息,请参阅article。如果要使用Microsoft graph api将用户分配给AAD应用程序,请参阅document

答案 1 :(得分:1)

通常,为了添加所有者,调用方应用程序(和调用用户,在委派权限的情况下,尽管在这种情况下仅为应用程序)需要具有读取所有者对象的权限。被添加,以及对被赋予新所有者的对象的读写权限。

因此,为了使应用程序将 User 对象作为所有者添加到调用应用程序本身为其所有者的 Application 对象,该应用程序需要(至少)Directory.Read.All(以读取新所有者的 User 对象)和Application.ReadWrite.OwnedBy(以能够写入 Application 对象的列表)所有者)。