Python запрашивает Microsoft Graph API-аутентификацию

1

У меня возникают проблемы с получением токена-носителя, используя 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'. Я понимаю, что проблема, вероятно, связана с необходимостью преобразования данных, но я не уверен, с чего начать.

Теги:
python-requests
microsoft-graph
oauth-2.0

2 ответа

2

Вы отправляете некоторые недопустимые заголовки в свой запрос:

  • 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)
0

Я считаю, что OAuth ожидает, что тело будет закодировано по URL-адресу, например:

data = "grant_type=client_credentials"
    + "&client_id=<client_id>"
    + "&client_secret=<client_secret>"
    + "&resource=https://graph.microsoft.com"
  • 0
    К сожалению, он все еще возвращает ту же ошибку.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню