我正在尝试使用 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
)