У меня возникают проблемы с получением токена-носителя, используя Python для API графиков Microsoft. Вот что я имею до сих пор:
import requests
import json
headers = {
'Content-Type': 'x-www-form-urlencoded',
'Authorization': 'Basic'
}
data = {
"grant_type": "client_credentials",
"client_id" :"<client_id>",
"client_secret": "<client_secret>",
"resource": "https://graph.microsoft.com"
}
r = requests.post('<token_address>', headers=headers, data=data)
print(r.text)
Я работал в Postman через x-www-form-urlencoded, но, похоже, не смог заставить его работать на Python. Он возвращает Тело запроса должно содержать следующий параметр: 'grant_type'. Я понимаю, что проблема, вероятно, связана с необходимостью преобразования данных, но я не уверен, с чего начать.
Вы отправляете некоторые недопустимые заголовки в свой запрос:
Content-Type
должен быть application/x-www-form-urlencoded
не x-www-form-urlencoded
.Authorization
вообще. Технически, поскольку requests.post
отправляет данные в форме, закодированной по умолчанию, вы можете безопасно удалить свои headers
из запроса:
payload = {
'grant_type': 'client_credentials',
'client_id': '<client_id>',
'client_secret': '<client_secret>',
'resource': 'https://graph.microsoft.com',
}
r = requests.post('https://login.microsoftonline.com/common/oauth2/token', data=payload)
print(r.text)
Я считаю, что OAuth ожидает, что тело будет закодировано по URL-адресу, например:
data = "grant_type=client_credentials"
+ "&client_id=<client_id>"
+ "&client_secret=<client_secret>"
+ "&resource=https://graph.microsoft.com"