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

Azure AD app with Application.ReadWrite.OwnedBy cannot add more owners to apps it created

我有一个 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 令牌的角色数组中有 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.

验证了创建者应用程序存在于所创建应用程序的所有者列表中

根据您的错误信息,您没有足够的权限。据我所知,如果您想将用户分配给具有应用程序权限的 AAD 应用程序,您需要拥有这些权限:Application.ReadWrite.OwnedBy 和 Directory.Read.All、Application.ReadWrite.All 和 Directory.Read.All。

此外,Microsoft 强烈建议您使用Microsoft Graph instead of Azure AD Graph API to access Azure Active Directory resources. For more details, please refer to the article. If you want to use Microsoft graph api to assign user to AAD Application, please refer to the document

一般来说,为了添加所有者,调用应用程序(和调用用户,在委派权限的情况下,尽管在这种情况下它只是一个应用程序)需要具有读取对象的权限正在添加的所有者,以及读取和写入被赋予新所有者的对象的权限。

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