Microsoft Graph API BadRequest当前经过身份验证的上下文无效

时间:2017-08-05 13:02:34

标签: microsoft-graph

我正在尝试开发一个简单的后台应用程序来连接到我的onedrive帐户(工作)并定期下载一些文件。

我遵循了本教程https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-v2-protocols-oauth-client-creds

我在这里注册了应用https://apps.dev.microsoft.com/portal/register-app 我已写下client_idclient_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'}

接下来,我发出G​​ET请求(正确设置了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"
    }
  }
}

我在应用设置中配置了这些权限 permissions

任何想法可能出错?

2 个答案:

答案 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}} /消息将所有消息发送到我的收件箱中