Microsoft 在 Python 中使用请求邀请用户访问 Azure AD 时出现"无法读取 JSON 请求有效负载"错误



我正在尝试使用 MS 图形 API 自动邀请用户加入 Azure AD,但收到"无法读取 JSON 请求有效负载"错误。

我正在从票务系统中提取数据,检索当前的 AAD 用户并区分两者。然后,我将新的推送到 AAD 中,并更新它们以将它们包含在与会者 AD 安全组中。

我创建了一个Python Azure函数,它使用请求调用图形API:

def insert_users(users_emails):
logging.info('Inserting new users in AAD')
token                       =   generate_auth_token()
users_emails    =   users_emails[:2]
added_attendees =   []
for email in users_emails:
req_body        =   {
"invitedUserEmailAddress"       :   email
,   "inviteRedirectUrl"             :   "https://myapp.com"
}
body_length     =   sys.getsizeof(req_body)
req_headers     =   {
'Authorization'     :   'Bearer {0}'.format(token)
,   'Content-Type'      :   'application/json; charset=utf-8'
,   'Content-Length'    :   str(body_length)
}
response    =   requests.post(
'https://graph.microsoft.com/v1.0/invitations'
,   headers =   req_headers
,   data    =   req_body
)
response    =   response.json()
logging.info(response)
added_attendees.append(email)
return added_attendees

图形 API 发回以下错误消息:

{'error': 
{'code':    'BadRequest', 
'message': 'Unable to read JSON request payload. Please ensure Content-Type header is set and payload is of valid JSON format.',
'innerError': 
{'request-id': '4ff5332d-d280-4b0d-9e04-a7359ab0e2fb', 'date': '2020-05-27T14:51:18'}
}
}

我尝试将字符集添加到内容类型标头,但它不起作用。我在某处阅读了内容长度可能很有用,所以我也添加了它,但无济于事。

测试在 Postman 中运行正常,我已经对 Azure AD API 执行 POST 请求以获取访问令牌,因此请求 JSON 正文可以解析正常。我还尝试在 JSON 有效负载中使用单引号或双引号,但它也没有用。

我的看法是图形 API 误解了某些东西,但我无法弄清楚是什么。

感谢您的帮助!

我找到了一个解决方案。我没有将数据参数传递给 request.post 方法,而是传递了一个 json= 参数

response    =   requests.post(
'https://graph.microsoft.com/v1.0/invitations'
,   json={'invitedUserEmailAddress':email,'inviteRedirectUrl':'https://myapp.com'}
,   headers =   req_headers
)

最新更新