由于 Graph 是一种自记录语言,我想利用它来发挥自己的优势,编写 PowerShell 函数来根据元数据自动生成 cmdlet。我已经完成了很多这样的工作,但在确定范围时遇到了问题。有没有办法找到范围?它不存储在元数据中,并且文档没有列出所有内容的范围(例如,Excel 中没有列出任何范围)。
Graph Explorer 似乎请求正确的权限,因此可以在某处访问此列表。
这取决于您正在寻找哪个 API。
Azure AD Graph API 的范围位于 https://msdn.microsoft.com/library/azure/ad/graph/howto/azure-ad-graph-api-permission-scopes。
在 https://developer.microsoft.com/en-us/graph/docs/authorization/permission_scopes 上有一个关于 Microsoft Graph API 不同部分的巨大列表。
首次登录 Graph Explorer 时,您授予它以下权限:
根据上面的描述和链接,您可以找出列表中每个项目的范围名称。 (例如第一个是 Mail.ReadWrite)。
在 Azure AD 中创建应用程序时,您可以配置它需要访问哪些应用程序以及需要哪些访问权限。这会生成用户在首次登录时授予访问权限的列表。
我编写了一个小函数来枚举所有 Microsoft Graph API 权限(基于 此参考)。目前需要
jq
,可能有一种方法可以在 PowerShell 中 100% 完成此操作,但这是一个快速而肮脏的修复。您可以进一步通过管道连接到 grep
来帮助查找您需要的权限。
将此功能添加到您的
Microsoft.PowerShell_profile.ps1
($PROFILE
) 以方便使用:
function Get-MgGraph-Scopes {
$uri = "https://graph.microsoft.com/v1.0/servicePrincipals(appId='00000003-0000-0000-c000-000000000000')?$select=id,appId,displayName,appRoles,oauth2PermissionScopes,resourceSpecificApplicationPermissions"
Invoke-MgGraphRequest -Uri $uri -OutputType Json |
jq -r '.appRoles + .oauth2PermissionScopes | .[] | .value'
}
使用示例:
PS > Get-MgGraph-Scopes | grep -i calendar
Calendars.Read
Calendars.ReadBasic.All
Calendars.ReadWrite
Calendars.Read
Calendars.Read.Shared
Calendars.ReadBasic
Calendars.ReadWrite
Calendars.ReadWrite.Shared