我想写一个PowerShell脚本来获得我的电子邮件从我的Outlook通过Oauth2令牌没有用户登录,但不幸的是没有运气。我能够成功地正确生成我的令牌,我可以在“jwt.ms”网站上看到它需要权限,但由于某种原因,它只是不工作。
如果我用“图形资源管理器”生成一个令牌,并直接粘贴到我的代码中,(所以如果我不是从PowerShell代码生成令牌),所有选项都工作正常,我可以从我的Outlook中取回所有细节。所以这是关于令牌和许可的事情,但我不确定到底是什么。
的数据
有趣的是,如果我把代码从:
$Uri = "https://graph.microsoft.com/v1.0/users/*********************************/messages"
字符串
收件人:
$Uri = "https://graph.microsoft.com/v1.0/users/*********************************/
型
在这种情况下,API将给予我的个人资料详细信息。
jwt.ms result:https://pastebin.com/tMmxfn5d
"roles": [
"Mail.ReadWrite",
"Mail.ReadBasic.All",
"Directory.Read.All",
"User.Read.All",
"Mail.Read",
"Mail.Send",
"Contacts.Read",
"Mail.ReadBasic"
],
型
错误消息:
Invoke-RestMethod: The remote server returned an error: (401) Unauthorized. At line:29 char:17
+ ... rResponse = Invoke-RestMethod -Method Get -Uri $Uri -Headers $Headers ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-RestMethod], WebException
+ FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand
型
我的powershell代码:
# Define the URI and parameters
$Uri = "https://login.microsoftonline.com/*********************************/oauth2/v2.0/token"
$Body = @{
"grant_type" = "client_credentials"
"client_id" = "*********************************"
"client_secret" = "*********************************"
"scope" = "https://graph.microsoft.com/.default"
}
$ContentType = "application/x-www-form-urlencoded"
# Send the POST request
$Response = Invoke-RestMethod -Method Post -Uri $Uri -Body $Body -ContentType $ContentType
# Display the access token
Write-Output "Access Token: $($Response.access_token)"
# Replace "{id | userPrincipalName}" with the id or userPrincipalName of the user
$Uri = "https://graph.microsoft.com/v1.0/users/*********************************/messages"
# Define the header for the "user" request
$Headers = @{
"Authorization" = "Bearer $($Response.access_token)"
}
# Send the GET request
$UserResponse = Invoke-RestMethod -Method Get -Uri $Uri -Headers $Headers
# Display the "user" information
Write-Output $UserResponse
型
1条答案
按热度按时间eimct9ow1#
这个问题已经解决了。
此Graph API仅适用于工作电子邮件(个人免费电子邮件不适用于此方法)。因此,我subsribed为微软交换帐户为4英镑,一切工作完美。