Получение следующего ответа об ошибке при выполнении базового POST API Graph с использованием REQUESTS в Python:
{
"error": {
"code": "Authorization_RequestDenied",
"message": "Insufficient privileges to complete the operation.",
"innerError": {
"request-id": "36c01b2f-5c5c-438a-bd10-b3ebbc1a17c9",
"date": "2019-04-05T22:39:37"
}
}
}
Вот мой запрос токена и запрос Graph с использованием REQUESTS в Python:
redirect_uri = "https://smartusys.sharepoint.com"
client_id = 'd259015e-****-4e99-****-aaad67057124'
client_secret = '********'
tennant_id = '15792366-ddf0-****-97cb-****'
scope = 'https://graph.microsoft.com/.default'
####GET A TOKEN
payload = "client_id = "+client_id+"&scope = "+scope+"&client_secret = "+client_secret+"&grant_type=client_credentials"
headers = {'content-type':'application/x-www-form-urlencoded'}
tokenResponse = requests.post('https://login.microsoftonline.com/'+tennant_id+'/oauth2/v2.0/token',headers=headers, data=payload)
json_tokenObject = json.loads(tokenResponse.text)
authToken = json_tokenObject['access_token']
#### Make a call to the graph API
graphResponse = requests.get('https://graph.microsoft.com/v1.0/me/',headers = {'Authorization':'Bearer '+authToken})
if tokenResponse.status_code != 200:
print('Error code: ' +graphResponse.status_code)
print(graphResponse.text)
exit()
print('Request successfull: Response: ')
print(graphResponse.text)
print('Press any key to continue...')
x=input()
Согласно документации ( https://docs.microsoft.com/en-us/graph/api/resources/users?view=graph-rest-1.0 ) для этого вызова /me мне нужно только одно из следующих разрешений:
и у меня есть все это как для приложений, так и для делегированных разрешений в диспетчере приложений Azure.
Что я здесь делаю неправильно? Я чувствую, что это что-то маленькое, но я просто не могу понять это.
Я расшифровал свой токен, используя: http://calebb.net/, и я не вижу места для «AUD», «роли» или «области действия», так что, может быть, я делаю это неправильно?
Я искал везде и не могу найти решение, любая помощь будет очень признательна.
Спасибо.






Похоже, вы забыли «Предоставить разрешения» своему приложению.
См. ответ это.
Я наконец понял это, это было связано с правами администратора, которые должны были быть предоставлены администратором для нашего Office 365.
это было так же просто, как дать моему администратору Office следующую ссылку и попросить его утвердить ее:
https://login.microsoftonline.com/{ИДЕНТИФИКАТОР TENNANT ЗДЕСЬ}/adminconsent?client_id = {ИДЕНТИФИКАТОР КЛИЕНТА ЗДЕСЬ}
Мгновенно сработало.
Я думаю, ты имеешь в видуhttps://login.microsoftonline.com/{tenant_ID_HERE}/adminconsent?client_id = {CLIENT ID HERE}
Мне нравится, как вы задокументировали собственное исследование!