首页 > 解决方案 > Python 请求 Microsoft Graph API 身份验证

问题描述

我在使用 Python 为 Microsoft Graph API 接收不记名令牌时遇到问题。这是我到目前为止所拥有的:

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)

我通过 x-www-form-urlencoded 在 Postman 中工作,但似乎无法在 Python 中工作。它返回请求正文必须包含以下参数:'grant_type'。我意识到问题可能与需要转换的数据有关,但我不确定从哪里开始。

标签: pythonoauth-2.0python-requestsmicrosoft-graph-api

解决方案


您在请求中发送了一些无效的标头:

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

推荐阅读