【问题标题】:Can't get permission's guids in microsoft graph api无法在 microsoft graph api 中获得权限的 guid
【发布时间】:2020-10-28 20:03:05
【问题描述】:

我想创建一个具有特定 GraphAPI 权限的应用程序。我想自动完成,所以 powershell 是我的选择。唯一缺少的是 GraphAPI 权限的 GUID,在超级棒的 Microsoft 文档中找不到。

我从其他几个已经问过(并标记为已回答大声笑)的问题中收集到的是:

    Connect-AzAccount -Credential $psCred -TenantId $azureTenantId  -ServicePrincipal 
    $graph = Get-AzADServicePrincipal -ApplicationId "00000003-0000-0000-c000-000000000000"
    $graph.AppRoles

这应该会给我一个 GraphAPI 必须提供的所有应用程序权限的列表。 不幸的是,我收到的对象中不存在 $graph.AppRoles(neither $graph.Oauth2Permissions)。 (我知道委派权限和应用程序权限之间的区别,它们位于 Oauth2Permissions/AppRoles 属性中。)

有什么建议吗?

【问题讨论】:

  • 请参考这个GitHub,如果有帮助请告诉我们
  • @SruthiJ-MSFTIdentity 这有点矫枉过正。我接受了 Allen Wu 的回答,并对其进行了一些调整。谢谢!

标签: powershell permissions azure-active-directory microsoft-graph-api


【解决方案1】:

Oauth2Permissions 和 AppRoles 属性存在于 Azure AD Powershell 中。

Connect-AzureAD -TenantId $tenantId -Credential $psCred
$graphsp1 = Get-AzureADServicePrincipal -Filter "AppId eq '00000003-0000-0000-c000-000000000000'"
$graphsp.AppRoles
$graphsp.Oauth2Permissions

您还可以使用 Microsoft Graph API 来获取应用程序/委托权限。

GET https://graph.microsoft.com/v1.0/servicePrincipals?$filter=appId eq '00000003-0000-0000-c000-000000000000'

只需在 Powershell 中使用 Invoke-RestMethod 调用 Microsoft Graph。

【讨论】:

  • 谢谢!这真的帮助了我,虽然它不是我想要的。只是一个小小的调整。我发布了我的完整答案
  • @Redman 我很高兴知道你已经得到了你想要的。但我仍然想澄清https://graph.microsoft.com/v1.0/applications/ 只能获得已分配给此 Azure AD 应用程序的权限。根据我的理解,如果你想创建一个新的 AAD 应用程序并分配 Graph Permissions,你需要提前知道权限 id。 servicePrincipals?$filter=appId eq '00000003-0000-0000-c000-000000000000' 可以列出所有 Graph 权限。然后,您可以在 powershell 中创建应用程序时添加 Microsoft Graph 权限。如有误解请指正。
  • @Redman 正如您在帖子中提到的“这应该给我一个 GraphAPI 必须提供的所有应用程序权限的列表。”所以我的答案是给你 Microsoft Graph 提供的所有权限。
  • 是的,我没有就问题的各个方面进行沟通。那在我身上。你绝对回答了我问的问题。不过,我真正想要的是:我已经有一个具有 Graph 权限的 AAD 应用程序,我想提取这些权限以在另一个租户的另一个 AAD 应用程序上分配相同的权限
  • @Redman BTW,如果您想获取已分配给 Azure AD 应用程序的权限 ID,只需在 Azure 门户上查看 AAD 应用程序的清单文件即可找到它们。
【解决方案2】:

感谢 Allen Wu 的回答,我能够提取权限 GUID。

虽然不是

GET https://graph.microsoft.com/v1.0/servicePrincipals?$filter=appId eq '00000003-0000-0000-c000-000000000000'

这个保存信息的调用,它是

GET https://graph.microsoft.com/v1.0/applications/"

这是一个。 然后通过一些基本的过滤,我得到了我需要的东西

$headers = getToken
$uri = "https://graph.microsoft.com/v1.0/applications/"
$result = Invoke-RestMethod -Uri $uri -Headers $headers -Method 'Get'
do {
    $result.value | ForEach-Object {
        if( $_.displayName -eq "YOUR_APPLICATION_DISPLAYNAME") {
            $result = $_.requiredResourceAccess | Where-Object resourceAppId -eq "00000003-0000-0000-c000-000000000000"
            break
        }
    }
    $result = Invoke-RestMethod -Uri $result.'@odata.nextLink' -Headers $headers -Method 'Get'
    $result = $result
}
while($result.'@odata.nextLink')

在 $result 我们有这个

resourceAppId:"00000003-0000-0000-c000-000000000000"
resourceAccess:[Object[14]]
[0]:@{id=e1fe6dd8-ba31-4d61-89e7-88639da4683d; type=Scope}
[1]:@{id=660b7406-55f1-41ca-a0ed-0b035e182f3e; type=Role}
[2]:@{id=242607bd-1d2c-432c-82eb-bdb27baa23ab; type=Role}
[3]:@{id=2280dda6-0bfd-44ee-a2f4-cb867cfc4c1e; type=Role}
[4]:@{id=46890524-499a-4bb2-ad64-1476b4f3e1cf; type=Role}
[5]:@{id=98830695-27a2-44f7-8c18-0c3ebc9698f6; type=Role}
[6]:@{id=9a5d68dd-52b0-4cc2-bd40-abcf44ac3a30; type=Role}
[7]:@{id=afdb422a-4b2a-4e07-a708-8ceed48196bf; type=Role}
[8]:@{id=70dec828-f620-4914-aa83-a29117306807; type=Role}
[9]:@{id=7ab1d382-f21e-4acd-a863-ba3e13f7da61; type=Role}
[10]:@{id=5b567255-7703-4780-807c-7be8301ae99b; type=Role}
[11]:@{id=230c1aed-a721-4c5d-9cb4-a90514e508ef; type=Role}
[12]:@{id=18a4783c-866b-4cc7-a460-3d5e5662c884; type=Role}
[13]:@{id=df021288-bdef-4463-88db-98f22de89214; type=Role}

你可以看到,根据resourceAppId我们正在谈论Microsoft GraphAPI权限。 type 属性指示它是委托权限还是应用程序权限。范围=委托 角色 = 应用程序

【讨论】:

    最近更新 更多