如何以编程方式为Azure AD应用程序获取图形API权限的GUID?

如何以编程方式为Azure AD应用程序获取图形API权限的GUID?,azure,azure-active-directory,microsoft-graph-api,Azure,Azure Active Directory,Microsoft Graph Api,我正在尝试向Azure AD应用程序添加所需的权限。我已经知道如何通过补丁REST调用从下载的清单复制信息,例如 "requiredResourceAccess": [ { "resourceAppId": "00000003-0000-0000-c000-000000000000", "resourceAccess": [ { "id": "7b9103a5-4610-446b-9670-80643382c1fa", "type": "Scope"

我正在尝试向Azure AD应用程序添加所需的权限。我已经知道如何通过补丁REST调用从下载的清单复制信息,例如

"requiredResourceAccess": [
{
  "resourceAppId": "00000003-0000-0000-c000-000000000000",
  "resourceAccess": [
    {
      "id": "7b9103a5-4610-446b-9670-80643382c1fa",
      "type": "Scope"
    },
    {
      "id": "5df07973-7d5d-46ed-9847-1271055cbd51",
      "type": "Scope"
    }
  ]
}
]          
正如Christer Ljung在他的博客上解释的那样

但谜团仍然在于我如何将人类可读的范围(如
Mail.Read
)转换为这些模糊的guid。我已经阅读了Sahil Malik's at的以下博客,该博客解释了如何获取特定ServicePrincipal的可用GUID列表。例如,通过http访问
https://graph.windows.net//servicePrincipals()api version=1.6&$filter=appId%20eq%20'00000002-0000-0ff1-ce00-000000000000'>
(交换)但当我试图获取ServicePrincipal的可用范围列表时
00000003-0000-0000-c000-000000000000
(我相信是用于Graph api的)返回值只是空的

有趣的是,通过Fiddler,我能够捕获一个http post请求,当通过Azure门户添加权限时,该请求包含所有GUID


有人知道我如何通过编程实现这一点吗

关于这个话题没什么好说的

首先,需要注意的是,所有作用域都注册在开发人员租户的主应用程序对象上。因此,一般来说,您将无法访问该信息,因为它将位于您不是用户的租户中。因此,作为外部开发人员,这些权限范围无法通过我们的API发现

第二,您可以看到Azure门户可以访问此信息,因为它可以提升对所有租户中所有资源的OAuth2Permissions的查询权限。这就是我们的用户体验如何填充您希望在租户中使用的所有外部和内部资源的所有权限。门户将首先检查租户中有哪些服务主体(一旦您同意使用应用程序,服务主体最常被配置),然后它将查找与该服务主体对应的应用程序对象,并找到所有权限范围。这种行为有望使您只看到与您相关的资源应用程序,而不是用所有可能的资源填充您的屏幕

最后,展望未来,我们希望从静态注册客户端调用资源应用程序所需的权限中退一步。相反,我们将推动一项新的计划。您将注意到,在这里,我们依赖于作用域名称,而不是像过去那样依赖于这些权限的ObjectID GUID。但是,我大体上同意您的观点,即资源公开的作用域的可发现性在很大程度上取决于它们自己的公共文档。我设想将来可能会有一个端点公开特定资源上所有可用的作用域,但我知道在不久的将来不会有这样的工作


让我知道这是否有帮助

经过调查,我发现了一种使用azure cli获取权限guid的方法。在此处共享,以防有人发现:

  • 通过显示名称、应用id或对象id获取特定服务主体的所有权限及其GUID。(请注意,显示名称不是唯一的,可以映射多个服务主体)
  • $az ad sp list--筛选“displayName eq'Microsoft Graph'”--查询'[].oauth2Permissions[].{Value:Value,Id:Id,UserApprovementDisplayName:UserApprovementDisplayName}'-o表
    值Id username
    -------------------------------------------------------  ------------------------------------  -----------------------------------------------------------------------------------------
    ServiceHealth.Read.所有55896846-df78-47a7-aa94-8D3D442CA7F读取服务运行状况
    ServiceMessage.Read.所有eda39fa6-f8cf-4c3c-a909-432c683e4c9b均读取服务消息
    TermStore.ReadWrite.All 6c37c71d-f50f-4bff-8fd3-8a41da390140读取和写入术语存储数据
    TermStore.Read.所有297f747b-0005-475b-8fef-c890f5152b38读取术语存储数据
    TeamMember.ReadWriteNownerRole.All 2104a4db-3a2f-4ea0-9dba-143d457dc666为所有团队添加和删除具有非所有者角色的成员
    团队。创建7825d5d6-6049-4ce7-bdf6-3b8d53f4bcd0创建团队
    TeamsAppInstallation.ReadWriteForUser 093f8818-d05f-49b8-95bc-9d2a73e9a43c管理已安装的团队应用程序
    TeamsAppInstallation.ReadWriteSelfForUser 207e0cb1-3ce7-4922-b991-5a760c346ebc允许团队应用程序为您自行管理
    ...
    $az ad sp list--过滤器“appId eq'00000003-0000-0000-c000-000000000000'--查询'[].oauth2Permissions[].{Value:Value,Id:Id,UserApprovanceDisplayName:UserApprovanceDisplayName}'-o表头
    值Id username
    -------------------------------------------------------  ------------------------------------  -----------------------------------------------------------------------------------------
    ServiceHealth.Read.所有55896846-df78-47a7-aa94-8D3D442CA7F读取服务运行状况
    ServiceMessage.Read.所有eda39fa6-f8cf-4c3c-a909-432c683e4c9b均读取服务消息
    TermStore.ReadWrite.All 6c37c71d-f50f-4bff-8fd3-8a41da390140读取和写入术语存储数据
    TermStore.Read.所有297f747b-0005-475b-8fef-c890f5152b38读取术语存储数据
    TeamMember.ReadWriteNownerRole.All 2104a4db-3a2f-4ea0-9dba-143d457dc666为所有团队添加和删除具有非所有者角色的成员
    团队,创造