Microsoft Graph API:Authorization_IdentityNotFound

时间:2018-03-27 21:18:59

标签: python microsoft-graph

我按照Get access without a user指南编写了一个名为Microsoft Graph的Python脚本。

此脚本将从cron安排,因此无法获得管理员同意(因此授权使用客户端凭据)。我能够使用此调用成功获取令牌:

request_url = "https://login.microsoftonline.com/mytenant.onmicrosoft.com/oauth2/v2.0/token"
data = { 
   'Host' : 'login.microsoftonline.com',
   'Content-Type' : 'application/x-www-form-urlencoded',
   'client_id' : 'my-client-id-1234',
   'scope' : 'https://graph.microsoft.com/.default',
   'client_secret' : client_secret,
   'grant_type' : 'client_credentials'
}
response = requests.post(url = request_url, data = data)

然后,我尝试使用有效令牌获取此次调用的用户列表:

request_url = "https://graph.microsoft.com/v1.0/users"
headers = { 
   'Authorization' : 'Bearer ' + token,
   'Host' : 'graph.microsoft.com'
}
response = requests.get(url = request_url, headers = headers)

问题是我收到Authorization_IdentityNotFound错误:

<Response [401]>
{
   "error": {
      "code": "Authorization_IdentityNotFound",
      "message": "The identity of the calling application could not be established.",
      "innerError": {
         "request-id": "2257f532-abc4-4465-b19f-f33541787e76",
         "date": "2018-03-27T19:11:07"
      }
   }
}

这些是我选择的权限:

graphPermsScreenshot

知道如何修复此错误吗?

1 个答案:

答案 0 :(得分:1)

首先,您可以继续删除所有这些委托权限范围。如果您正在使用客户端凭据授予,则您将只使用应用程序权限范围。

其次,您需要先执行Admin Consent流,然后才能使用Client Credentials。这是通过让租户的全局管理员进行身份验证并接受您的范围请求来完成的:

https://login.microsoftonline.com/common/adminconsent?client_id=[APPLICATION ID]&redirect_uri=[REDIRECT URI]

您可以在此处详细了解管理员同意:v2 Endpoint and Admin Consent