Azure добавляет назначения ролей приложений с помощью Python

#python #azure #api #python-requests #azure-active-directory

#python #azure #API #python-запросы #azure-active-directory

Вопрос:

Я пытаюсь добавить новую роль приложения для пользователей Azure AD через Graph API с использованием Python. Но я сталкиваюсь с проблемой. Я следую документам Microsoft: https://docs.microsoft.com/en-us/graph/api/user-post-approleassignments?view=graph-rest-1.0amp;tabs=http

структура работает правильно при использовании Postman. Ниже приведен сценарий Python:

 import json, requests

def test():
    token={ACCESS_TOCKEN}
    data={"principalId":"ff868303-fbb7-4027-87a1-00b92013d343","resourceId":"4f162966-2c98-4439-b924-7730c40e98551","appRoleId":"827ee854-4907-4e96-b238-c861d846c450"}
    return requests.post('https://graph.microsoft.com/v1.0/Users/ff868303-fbb7-4027-87a1-00b92013d343/appRoleAssignments',
    headers={'Authorization': 'Bearer '   token_request , 'Content-Type': "application/json"},
    data=data
    )
 

Ошибка:

 {'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': {'date': '2020-11-25T15:43:24', 'request-id': 
'8301f593-cab8-4228-b053-c9d24139a85f', 'client-request-id': '8301f593-cab8-4228-b053-c9d24139a85f'}}}
 

Ответ №1:

Потому что вы не отправляете json в REST API. Используйте аргумент ‘json’ вместо ‘data’ метода post. См . https://requests.readthedocs.io/en/master/user/quickstart/#more-complicated-post-requests . Должно быть:

 import json, requests
from uuid import UUID

def test():
    token={ACCESS_TOCKEN}
    data={"principalId":UUID("ff868303-fbb7-4027-87a1-00b92013d343"),"resourceId":UUID("4f162966-2c98-4439-b924-7730c40e98551"),"appRoleId":UUID("827ee854-4907-4e96-b238-c861d846c450")}
    return requests.post('https://graph.microsoft.com/v1.0/Users/ff868303-fbb7-4027-87a1-00b92013d343/appRoleAssignments',
    headers={'Authorization': 'Bearer '   token, 'Content-Type': "application/json"},
    json = data
    )
 

Или вы также можете выгрузить json из словаря и передать аргумент data. data = json.dumps(data) .

Комментарии:

1. Теперь я сталкиваюсь с другой ошибкой: «Не удается преобразовать примитивное значение в ожидаемый тип ‘Edm.Guid'»

2. Можете ли вы попробовать обернуть все идентификаторы guid в UUID('<guid string>')

3. извините, что вы имеете в виду, перенося все идентификаторы guid в UUID (‘<строка guid>’)?

4. А также, пожалуйста, учтите, что я могу назначить роль с той же информацией через Postman

5. повысить значение ошибки (‘неверно сформированная шестнадцатеричная строка UUID’) ValueError: неверно сформированная шестнадцатеричная строка UUID