Azure 端口在某些地方仍然使用 Azure AD Graph API。它使用它的一件事是列出 API 权限。为此,门户使用 REST API 目标GET https://graph.windows.net/myorganization/applicationRefs/c5393580-f805-4401-95e8-94b7a6ef2fc2?api-version=2.0
(针对 Office 365 管理 API 显示的示例)。我已经搜索过,似乎找不到使用 Microsoft Graph API 列出类似权限集的方法。有没有办法使用 Microsoft Graph API 访问它?
2 回答
好的,本来打算赞成以前的答案之一,但是我的个人资料太新了。:( 如上所述,您可以通过阅读租户中的 MS Graph 服务主体来执行此操作。此PowerShell 代码给出了一个示例(它用于在and模块中调用的命令Find-GraphPermission
中。autographps
autographps-sdk
基本做法是:
- 从
appRoles
_servicePrincipal
- 从
publishedPermissionScopes
属性中获取委派权限 - 的每个元素
appRoles
都有一个 id,可以从租户中appRoleAssigment
应用程序上的给定对象读取或写入。servicePrincipal
请注意,每个appRole
元素都有一个value
属性,它是应用程序权限的通用友好名称(例如BitlockerKey.ReadBasic.All
- 每个元素都存在一个相似的
id
和value
对,publishedPermissionScopes
它为您提供委派的权限。您可以将这些 id 与oauth2PermissionGrant
段下的对象一起使用,/oauth2PermissionGrants
以枚举租户中给定servicePrincipal
(因此app
)的同意授予,或者授予或删除同意
请注意,两者的 id在所有租户appRoles
中publishedPermissionScopes
都是相同的,因此您实际上可以为任何租户执行相同的友好名称到 id 的映射,并使用静态快照。这很有用,因为您的应用程序可能无法读取 Microsoft GraphservicePrincipal
对象。如果您存储静态版本,则无论如何您都将拥有映射,并且您只会错过为新 API 添加到 Microsoft Graph 的任何新权限。
此文件包含 MS Graph 的快照,servicePrincipal
作为相当可读的类似 JSON 的 PowerShell 哈希表:https ://github.com/adamedx/autographps-sdk/blob/main/src/common/DefaultScopeData.ps1
对于这个要求,你可以使用这个microsoft graph api:https://graph.microsoft.com/v1.0/applications/<object id of the application>
它将响应如下截图的结果(请注意字段requiredResourceAccess
):
下面的内容requiredResourceAccess
就是这个应用的API权限。typescope
表示权限为Delegated类型,typerole
表示权限为Application类型。
那么请参考下面的步骤来了解下面的字段是指哪个id
权限resourceAccess
。
复制
resourceAppId
,在我的截图中是00000003-0000-0000-c000-000000000000
。并请求图形 api:https://graph.microsoft.com/v1.0/serviceprincipals?$filter=appId eq '00000003-0000-0000-c000-000000000000'
在第一个图形 api 的响应中复制一个
id
下面的resourceAccess
字段。例如复制a154bxxxxxxxxxxx59
我的第一个屏幕截图中的第一个 id。然后在第二个graph api的response中搜索这个id,我们可以发现这个id是指User.Read.All
权限。