我一直在尝试使用PowerShell访问Microsoft Graph。
首先,我尝试使用authorization flow和Invoke-WebRequest
以及Invoke-RestMethod
这两项工作都没有。
然后我发现this blog显示了如何使用PowerShell和一些Azure模块来完成它。下面是我使用的代码(从该博客直接翻录),但每次我到达Invoke-RestMethod
(在do-while循环中)而不是获取查询结果时,我得到一个{{ 1}}:
Invoke-RestMethod:远程服务器返回错误:(403)Forbidden。
403 Forbidden error
我可以从图形资源管理器中运行相同的查询(Function GetAuthToken {
Param (
[Parameter()]
$TenantName
)
Import-Module Azure
$clientId = "1950a258-227b-4e31-a9cf-717495945fc2"
$resourceAppIdURI = "https://graph.microsoft.com"
$authority = "https://login.microsoftonline.com/$TenantName"
$authContext = New-Object "Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext" -ArgumentList $authority
$Credential = Get-Credential
$AADCredentialUser = New-Object "Microsoft.IdentityModel.Clients.ActiveDirectory.UserCredential" -ArgumentList $credential.UserName, $credential.Password
$authResult = $authContext.AcquireToken($resourceAppIdURI, $clientId, $AADCredentialUser)
Write-Output $authResult
}
Function GetAllObjectOfType {
param
(
[Parameter(Mandatory = $true)]
$Tenant,
[Parameter(Mandatory = $true)]
$Type,
[Parameter(Mandatory = $false)]
$BatchSize = 100,
[Parameter(Mandatory = $false)]
$Version = 'Beta'
)
#------Get the authorization token------#
$token = GetAuthToken -TenantName $tenant
#------Building Rest Api header with authorization token------#
$authHeader = @{
'Content-Type' = 'application/json'
'Authorization' = $token.CreateAuthorizationHeader()
}
#------Initial URI Construction------#
#$uritest = "https://graph.microsoft.com/v1.0/users/user@contoso.com/mailFolders/Inbox/childFolders"
$uritest = "https://graph.microsoft.com/v1.0/me/mailFolders/Inbox"
#Join-Path -Path ''
$ObjCapture = @()
do {
$users = Invoke-RestMethod -Uri $uritest -Headers $authHeader -Method Get
$FoundUsers = ($Users.value).count
write-host "URI" $uri " | Found:" $FoundUsers
#------Batched URI Construction------#
$uri = $users.'@odata.nextlink'
$ObjCapture = $ObjCapture + $users.value
}until ($uri -eq $null)
$ObjCapture
}
),它运行完美,没有错误。
/v1.0/me/mailFolders/Inbox
似乎正在工作,因为我得到一个带有过期,刷新令牌等的令牌,而GetAuthToken
也会返回正确的$token.CreateAuthorizationHeader()
我以前从未对Microsoft Graph做过任何事情,所以我确定有些事情我做错了,但我不能为我的生活弄清楚是什么。
答案 0 :(得分:2)
您无法重复该博文中的clientid
。您需要通过注册申请来获得自己的clientid
。有关如何注册应用的详细信息,请参阅Register your app with the Azure AD v2.0 endpoint。
答案 1 :(得分:0)
似乎是在同一来源的follow-up blog post中得到了答复。
创建应用后,默认情况下,该应用有权访问仅以下内容的数据: 通过“登录并读取用户”登录帐户的用户 个人资料”委派的权限。如果您尝试执行使用此脚本 AppID / ClientID来查询Azure AD以获取目录中所有用户的列表, 您会收到一条错误消息,指出(403)禁止,因为它没有 足够的权限来执行该活动。
答案 2 :(得分:-1)
我认为它需要AD Azure Premium 2许可证 enter link description here