Получение «INVALID_TOKEN_FORMAT Формат маркера безопасности не соответствует ожидаемой схеме».заголовок аутентификации docusign - PullRequest
0 голосов
/ 10 июня 2019

Я пытаюсь написать запрос, используя Python Requests, который отправляет запрос в Docusign. Мне нужно использовать устаревший заголовок авторизации, но, к сожалению, большая часть документации для этого была удалена. Когда я отправляю запрос, я получаю сообщение об ошибке, как указано в заголовке.

Из исследований я обнаружил, что специальные символы в пароле могут вызывать эту проблему, поэтому я подтвердил, что в моем пароле нет специальных символов и что мой ключ API правильный. В настоящее время я отправляю заголовок в виде строкового словаря, как показано ниже. Я пробовал это несколькими другими способами, и это, кажется, самое близкое, но это все еще приводит к ошибке. Другие способы, которые я пробовал, включают в себя попытку записать заголовок в виде одной строки (не формируя сначала словарь), но, похоже, это не сработало лучше.

docusign_auth_string = {}
docusign_auth_string["Username"] = docusign_user
docusign_auth_string["Password"] = docusign_password
docusign_auth_string["IntegratorKey"] = docusign_key

docusign_auth_string = str(docusign_auth_string)

headers = {'X-DocuSign-Authentication': docusign_auth_string}

response = requests.post(docusign_url, headers=headers, data=body_data)

Приведенный выше код возвращает 401 с сообщением INVALID_TOKEN_FORMAT «Формат маркера безопасности не соответствует ожидаемой схеме». Заголовок, который я отправляю, выглядит следующим образом: {'X-DocuSign-Authentication': "{'Имя пользователя': 'test@test.com', 'Пароль': 'xxxxxxxxxx', 'IntegratorKey': 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'}"} *}

Когда я отправляю запрос через Почтальон, он работает просто отлично. В Почтальоне я ввожу имя заголовка как X-Docusign-Authentication, а значение как: {"Имя пользователя": "{{ds_username}}", "Пароль": "{{ds_password}}", "IntegratorKey": "{ {ds_integrator_key}} "} (добавляются те же значения переменных, что и в коде Python).

Следовательно, это определенно связано с тем, как Requests отправляет заголовок.

Кто-нибудь знает, почему я могу получить вышеуказанную ошибку?

Ответы [ 3 ]

1 голос
/ 11 июня 2019

Я могу воспроизвести это поведение: похоже, DocuSign не принимает одинарные кавычки вокруг подпараметров значения заголовка x-DocuSign-Authentication.

Ваш пример завершается ошибкой:

{'Username': 'test@test.com', 'Password': 'xxxxxxxxxx', 'IntegratorKey': 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'}

Это имеет больший успех:

{"Username": "test@test.com", "Password": "xxxxxxxxxx", "IntegratorKey": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"}

Я недостаточно знаком с Python, чтобы посоветовать, если есть другая структура кода, которой вы можете следовать, чтобы использовать двойные кавычки вместо одинарных.В худшем случае вам может потребоваться вручную установить значение заголовка в соответствии с этим форматом.

1 голос
/ 11 июня 2019

Я нашел решение этой проблемы.Ответ, в котором упоминались двойные кавычки, является правильным, но в Python мне не удалось отправить строку с правильным форматом, чтобы docusign мог ее понять.Затем я нашел следующий вопрос переполнения стека, который в конечном итоге обеспечил решение:

Как отправить dict в заголовке в качестве значения для ключа 'Authorization' в запросах python?

Я использовал json.dumps, и это решило проблему.Мой код выглядит следующим образом:

docusign_auth_string = {}
docusign_auth_string["Username"] = docusign_user
docusign_auth_string["Password"] = docusign_password
docusign_auth_string["IntegratorKey"] = docusign_key

headers = {"X-DocuSign-Authentication": json.dumps(docusign_auth_string), "Content-Type": "application/json"}
0 голосов
/ 10 июня 2019

Поскольку у вас есть успех с использованием Почтальона, это поможет точно узнать, что отправляется через ваш запрос.Для этого используйте:

response = requests.get(your_url, headers=your_headers)
x = response.request.headers()
print(x)

Это покажет вам, какие именно запросы готовятся и отправляются.Если вы разместите этот ответ здесь, я буду рад помочь вам.

Как просмотреть весь HTTP-запрос, отправляемый моим приложением Python?

Во втором ответе отображаются все возможные параметры объекта ответа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...