通过cURL从Microsoft Graph API获取Access_Token

时间:2019-12-03 18:15:39

标签: curl microsoft-graph

当我根据[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时,出现错误:

  

访问令牌验证失败。无效的观众

curl -X GET -H "Authorization: Bearer [accessTokenFromPreviousCommand]" https://graph.microsoft.com/v1.0/me

如果我在Microsoft Graph Explorer中运行https://graph.microsoft.com/v1.0/me查询,它将正常工作。我还可以使用Internet浏览器的“网络”选项卡来获取现有的access_token,并在第二个cURL命令中使用该获取的令牌来获得预期的结果。但是,我还没有弄清楚如何成功获取第一个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]-伍兹,杰克逊;劳拉(Graura)塞莱斯特·古兹曼; Angelgolfer;威克,瑞安;以及将来可能的贡献者
Microsoft Graph的身份验证和授权基础
Microsoft文档-Microsoft Graph
2019年9月19日[在线]
https://docs.microsoft.com/en-us/graph/auth/auth-concepts
[访问:2019年12月3日]

1 个答案:

答案 0 :(得分:1)

通过客户端凭据进行身份验证时,不能使用pointers。您需要通过/meid指定用户。

当Graph看到userPrincipalName时,它将用“当前已验证用户的ID”替换该节点。由于使用客户端凭据时没有经过身份验证的用户,因此Graph无法知道您要查找的用户。