当我按照 [1] 和 [2] 在 Cygwin 中运行此命令时,我得到一个 Access_Token:
curl -X POST -d 'grant_type=client_credentials&client_id=[myClientId]&client_secret=[myAppSecret]&scope=openid profile User.ReadWrite User.ReadBasic.All Sites.ReadWrite.All Contacts.ReadWrite People.Read Notes.ReadWrite.All Tasks.ReadWrite Mail.ReadWrite Files.ReadWrite.All Calendars.ReadWrite' https://login.microsoftonline.com/[myTenantId]/oauth2/token
当我稍后尝试在这个简单的查询中使用该 access_token 时,出现错误:
Access token validation failure. Invalid audience
curl -X GET -H "Authorization: Bearer [accessTokenFromPreviousCommand]" https://graph.microsoft.com/v1.0/me
如果我运行 https://graph.microsoft.com/v1.0/me在 Microsoft Graph Explorer 中查询,它工作正常。我还可以使用互联网浏览器的“网络”选项卡来获取现有的 access_token,并在第二个 cURL 命令中使用该获取的 token 来获取预期结果;但是,我还没有弄清楚如何成功获取第一个 cURL 命令返回的 access_token 并在第二个 cURL 命令中使用它。
我确实在内部与一位开发人员同事讨论过这个问题,他提到我查看了 [2],但我仍然有点困惑。
有人可以告诉我在上面两个 cURL 命令中我做错了什么吗?
[1] - 达维德毛里
通过 cURL 调用 Azure REST API
Medium.com
2018年5月4日 [在线]
https://medium.com/@mauridb/calling-azure-rest-api-via-curl-eb10a06127
[访问日期:2019 年 12 月 3 日]
[2] - 伍兹, jackson ;格雷厄姆,劳拉;古兹曼,塞莱斯特;天使高尔夫球手;威克,瑞安;以及 future 可能的贡献者
Microsoft Graph 的身份验证和授权基础知识
Microsoft 文档 - Microsoft Graph
2019年9月19日 [在线]
https://learn.microsoft.com/en-us/graph/auth/auth-concepts
[访问日期:2019 年 12 月 3 日]
最佳答案
当您使用客户端凭据进行身份验证时,无法使用 /me
。您需要通过 id
或 userPrincipalName
指定用户。
当 Graph 看到 /me
时,它会将该节点替换为“当前经过身份验证的用户的 ID”。由于在使用客户端凭据时没有经过身份验证的用户,因此 Graph 无法知道您正在寻找哪个用户。
关于curl - 通过 cURL 从 Microsoft Graph API 获取 Access_Token,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59163095/