Я предполагаю, что вы получили код аутентификации из системы идентификации DocuSign и пытаетесь обменять его на токен доступа.
Пара вопросов:
docs неправильно указывает, что redirect_uri должен быть включен в запрос. Пример запроса в документации правильно показывает, что запрос должен включать только параметры grant_type
и code
.
Примечание. Хотя стандарт OAuth , раздел 4.1 (d) действительно указывает на то, что redirect_url должен быть включен, DocuSign обычно его не включает.
Я предполагаю, что DocuSign будет игнорировать параметр redirect_uri, но вы можете попытаться пропустить его.
Другая проблема связана со временем : код авторизации, полученный вами от DocuSign, действителен только в течение минуты или около того. Если вы не сразу используете код авторизации (ваш код docCode
), вы получите ошибку Invalid Grant.
Известный хороший пример программного обеспечения
Я предлагаю вам также проверить пример известного кода для C # . Вы можете использовать протокол просмотра, чтобы увидеть, что именно он делает во время аутентификации.
Использовать библиотеку
Я также предлагаю вам поискать клиентскую библиотеку OAuth-кода авторизации, которую вы можете использовать вместо того, чтобы использовать свою собственную.
Например, вы устанавливаете и проверяете значение состояния? Это важно сделать, чтобы остановить CSRF-атаки. Смотрите эту статью .
Добавлена
Мне также не ясно, что вы используете правильное значение в качестве authorization code
.
Я считаю, что поток должен быть:
- Пользователь нажимает «Аутентификация с DocuSign» в приложении Angular.
- Браузер пользователя выполняет GET для сервера аутентификации DocuSign. На данный момент в браузере больше не работает приложение Angular.
- Браузер пользователя и сервер аутентификации DocuSign обмениваются HTML назад и вперед при аутентификации пользователя с помощью DocuSign.
- Пользователь завершает процесс аутентификации с помощью DocuSign.
- DocuSign отправляет браузеру ответ REDIRECT, сообщая браузеру выполнить GET для URL перенаправления. Перенаправление (и GET) включает параметры запроса для
code
и state
- Ваш СЕРВЕР (не приложение Angular) получает запрос GET.
- Ваш сервер должен:
- Извлечение параметров запроса
code
и state
- Убедитесь, что
state
совпадает с отправленным на шаге 2.
- Делает POST-запрос к DocuSign для обмена кода авторизации на токен доступа.
- ОТВЕЧАЕТ браузеру с помощью программы Angular.
- Программа Angular снова запущена в браузере.
Использование неявного гранта
Другой вариант - использовать неявное предоставление. Таким образом, вам не нужен серверный компонент. С помощью Implicit Grant ваша угловая программа обрабатывает поток.