我正在尝试使用 Perl/curl 做一些 MS Graph 工作,但遇到了一些问题。把问题带回到我能想到的最基本的例子:来自 bash 脚本的 2 个curl 命令。
我有 APP_ID、APP_Secret 和 Tenant_ID。这些在使用 Axios(我不想使用)的 NodeJS 脚本中工作得很好。
获取代币:
curl -X POST -d 'grant_type=client_credentials&client_id=[APP_ID]&client_secret=[APP_SECRET]' https://login.microsoftonline.com/[TENANT_ID]/oauth2/token
此命令会生成一个包含 access_token 的 JSON (?) 回复,我将其复制/粘贴到以下命令中:
curl -X GET -H "Authorization: Bearer [TOKEN]" -H "Content-Type: application/json" https://graph.microsoft.com/v1.0/groups
结果是:
{"error":{"code":"InvalidAuthenticationToken","message":"Access token validation failure. Invalid audience.","innerError":{"date":"2023-01-20T11:12:55","request-id":"[request_id]","client-request-id":"[client_request_id]"}}}
这让我很困惑。我刚刚获得了access_token。我猜我做错了什么,只是不知道是什么。
终于找到解决办法了。结果我忘记了令牌请求标头中的两件事:
忘记瞄准镜是一种“糟糕”的经历。应该知道这一点。该资源让我花了一段时间。发现了这里
已将其放在下面的 bash 脚本中(途中了解了 jq)
#! /usr/bin/bash
token=`curl \
-d grant_type=client_credentials \
-d client_id=[client_id] \
-d client_secret=[client_secret] \
-d scope=https://graph.microsoft.com/.default \
-d resource=https://graph.microsoft.com \
https://login.microsoftonline.com/[tenant_id]/oauth2/token \
| jq -j .access_token`
curl -X GET \
-H "Authorization: Bearer $token" \
-H "Content-Type: application/json" \
https://graph.microsoft.com/v1.0/groups \
| jq .
我正在尝试通过Azure应用程序访问outlook邮箱,我也遇到了这个问题。我已经使用了此博客中的步骤:“https://medium.com/@manojkumardhakad/python-read-and-send-outlook-mail-using-oauth2-token-and-graph-api-53de606ecfa1”及其当我第一次创建这个秘密时,它为我工作。 但是,根据我们的密码轮换策略更改秘密后,我无法使用我在第一步中从浏览器获得的身份验证代码重新生成身份验证令牌。 在兑换身份验证令牌的身份验证代码的第二步中,我不断收到错误消息“AADSTS7000215:提供的客户端密钥无效。请确保请求中发送的密钥是客户端密钥值,而不是客户端密钥 ID,对于秘密已添加到应用程序 XXX”。我已经尝试了多个新的秘密,有或没有 url 编码。
我还尝试了此博客中对您有用的步骤。生成令牌的第一步成功,但第二步失败并出现以下错误。这似乎是有效的,因为我没有运行交互式步骤来登录电子邮件帐户并授权此应用程序访问它。可以
“错误”:{ "code": "Authorization_RequestDenied", "message": "权限不足,无法完成操作。", “内部错误”:{ “日期”:“2024-01-06T17:59:28”, “请求ID”:“bed276cb-a256-4a53-888c-fba7a7973603”, “客户端请求 ID”:“bed276cb-a256-4a53-888c-fba7a7973603”