问题描述
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 访问它?
解决方法
好的,本来打算对之前的一个答案投赞成票,但我的个人资料太新了。 :( 如上所述,您可以通过读取租户中的 MS Graph 服务主体来完成此操作。此 PowerShell code 给出了一个示例(它在 Find-GraphPermission
和 { {1}} 个模块。
基本方法是:
- 从
autographps
的autographps-sdk
属性获取仅限应用的权限 - 从
appRoles
属性获取委托权限 -
servicePrincipal
的每个元素都有一个 ID,可以从租户中应用程序publishedPermissionScopes
上的给定appRoles
对象读取或写入该 ID。请注意,每个appRoleAssigment
元素都有一个servicePrincipal
属性,它是仅应用权限的通用友好名称(例如appRole
-
value
的每个元素都有一个类似的BitlockerKey.ReadBasic.All
和id
对,它为您提供委派的权限。您可以将这些 ID 与value
段下的publishedPermissionScopes
对象一起使用,以枚举租户中给定oauth2PermissionGrant
(因此/oauth2PermissionGrants
)的同意授权,或者授予或删除同意
请注意,servicePrincipal
和 app
的 ID 在所有租户中都是相同的,因此您实际上可以为任何租户执行相同的友好名称到 ID 的映射,并使用静态快照。这很有用,因为您的应用程序可能无法读取 Microsoft Graph appRoles
对象。如果您存储静态版本,则无论如何都将拥有映射,并且只会错过为新 API 添加到 Microsoft Graph 的任何新权限。
此文件包含 MS Graph publishedPermissionScopes
的快照,作为一个相当可读的类似 JSON 的 PowerShell 哈希表:https://github.com/adamedx/autographps-sdk/blob/main/src/common/DefaultScopeData.ps1
对于此要求,您可以使用 this microsoft graph api:https://graph.microsoft.com/v1.0/applications/<object id of the application>
它会响应如下截图的结果(请注意字段requiredResourceAccess
):
requiredResourceAccess
下的内容是本应用的 API 权限。类型 scope
表示权限为 Delegated 类型,类型 role
表示权限为 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
之一。例如,在我的第一个屏幕截图中复制第一个 ida154bxxxxxxxxxxx59
。然后在第二个图形api的响应中搜索这个id,我们可以找到这个id引用User.Read.All
权限。