Ошибка Microsoft Graph «Не удается прочитать JSON полезные данные запроса» при приглашении пользователей в Azure AD в Python с запросами - PullRequest
0 голосов
/ 27 мая 2020

Я пытаюсь автоматизировать приглашение пользователей в Azure AD с помощью MS Graph API, но получаю сообщение об ошибке «Не удается прочитать JSON запрос полезной нагрузки».

Я получаю данные из система продажи билетов, извлекающая текущих пользователей AAD и различая обоих. Затем я буду помещать новые в AAD и обновлять их, чтобы включить их в группу безопасности AD посетителей.

Я создал Python Azure функцию, которая вызывает Graph 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 Graph отправляет следующее сообщение об ошибке:

{'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'}
    }
}

Я попытался добавить кодировку в заголовок Content-Type, но это не сработало. Я где-то читал, что Content-Length может быть полезным, поэтому я добавил и его, но безрезультатно.

Тесты проходят нормально в Postman, и я уже выполняю запрос POST для Azure AD API, чтобы получить Токен доступа, поэтому тогда тело запросов JSON обрабатывается нормально. Я также пробовал использовать одинарные или двойные кавычки в полезной нагрузке JSON, но это тоже не сработало.

Я считаю, что Graph API неправильно интерпретирует что-то, но я не могу понять, что именно.

Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 27 мая 2020

Я нашел решение. Вместо передачи аргумента данных методу request.post я передал json = argument

    response    =   requests.post(
                            'https://graph.microsoft.com/v1.0/invitations'
                        ,   json={'invitedUserEmailAddress':email,'inviteRedirectUrl':'https://myapp.com'}
                        ,   headers =   req_headers
                    )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...