#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