我正在尝试开发一个简单的后台应用程序来连接到我的onedrive帐户(工作)并定期下载一些文件。
我在这里注册了应用https://apps.dev.microsoft.com/portal/register-app
我已写下client_id
和client_secret
要获取访问令牌,我向
发出POST请求https://login.microsoftonline.com/common/oauth2/v2.0/token 使用以下格式编码数据
{
'client_id': 'clientid here',
'client_secret': 'secret is here',
'scope': 'https://graph.microsoft.com/.default',
'grant_type': 'client_credentials',
}
我找回access_token
{'ext_expires_in': 0,
'token_type': 'Bearer',
'expires_in': 3600,
'access_token': 'eyJ0eXAiOiJKV1QiLCJhbGciO---SHORTENED FOR BREVITY'}
接下来,我发出GET请求(正确设置了Bearer
标头)到https://graph.microsoft.com/v1.0/me
并得到此错误响应(我得到的任何端点fwiw)
{
"error": {
"code": "BadRequest",
"message": "Current authenticated context is not valid for this request",
"innerError": {
"request-id": "91059f7d-c798-42a1-b3f7-2487f094486b",
"date": "2017-08-05T12:40:33"
}
}
}
任何想法可能出错?
答案 0 :(得分:5)
我将提交一个错误来改进这个糟糕的错误消息。问题是您正在使用应用程序权限(client_credentials流)发出请求 - 其中没有登录用户上下文。您的请求是/me
,而/me
基本上是登录用户的别名 - 在这种情况下,没有一个!
您应该尝试拨打https://graph.microsoft.com/v1.0/users
。 但是,在你这样做之前。在应用程序注册门户中,您已选择委派的权限,但您使用应用程序权限进行调用。您应该删除委派的权限,并选择适当的应用程序权限 - 例如,要调用用户,请选择 User.Read.All 。然后,请务必转至/ adminconsent端点同意/重新同步您的应用。
请在此处详细了解权限以及委派和应用程序权限:https://developer.microsoft.com/en-us/graph/docs/concepts/permissions_reference
希望这有帮助,
答案 1 :(得分:0)
我使用https://graph.microsoft.com/v1.0/users/ {{Emailid}} /消息将所有消息发送到我的收件箱中