azure 在成功生成令牌后,当我尝试通过图形API获取邮件时,我收到401错误

m1m5dgzv  于 2023-08-07  发布在  其他
关注(0)|答案(1)|浏览(128)

我想写一个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

eimct9ow

eimct9ow1#

这个问题已经解决了。
此Graph API仅适用于工作电子邮件(个人免费电子邮件不适用于此方法)。因此,我subsribed为微软交换帐户为4英镑,一切工作完美。

相关问题