Python请求Microsoft Graph API身份验证

时间:2018-06-22 18:04:00

标签: python oauth-2.0 python-requests microsoft-graph

在使用Microsoft Graph API的Python使用接收承载令牌时遇到问题。这是我到目前为止的内容:

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'。我意识到问题可能与需要转换的数据有关,但是我不确定从哪里开始。

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

我相信OAuth希望该正文经过URL编码,如下所示:

data = "grant_type=client_credentials"
    + "&client_id=<client_id>"
    + "&client_secret=<client_secret>"
    + "&resource=https://graph.microsoft.com"