我有一个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
验证了创建者应用程序在创建的应用程序的所有者列表中。
答案 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 对象的列表)所有者)。