У меня есть REST API, созданный с помощью C#, Swashbuckle и Swagger. Аутентификация должна использовать токены OAuth2. Я успешно настроил Swagger для использования протокола OAuth2:
- запросить у сервера авторизации код
- redirect_url для oauth2-redirect. html (предоставляется по умолчанию)
- обратный вызов из oauth2-redirect. html на главную страницу с кодом
- запросить у сервера авторизации получить токены
Тем не менее сервер авторизации вернет ошибку. После расследования ошибка исходит из данных, содержащихся в запросе на получение токенов. Grant_type, code и redirect_url заполнены правильными данными, а заголовок Authorization зашифрован в Basi c.
Разница между запросом от Swagger и тем, который я сделал для тестирования, заключается в наличии параметра "client_id", автоматически предоставленного Swagger в запросе. Вы можете найти оба запроса ниже:
Следующий запрос работает:
curl --location --request POST 'https://AUTHORIZATIONSERVER/oauth2/IDP/access_token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--header 'Authorization: Basic ***************' \
--data-urlencode 'grant_type=authorization_code' \
--data-urlencode 'code=***************' \
--data-urlencode 'redirect_uri=https://MYSERVER/swagger/ui/oauth2-redirect.html'
Следующий запрос (отправленный Swagger) не работает:
curl --location --request POST 'https://AUTHORIZATIONSERVER/oauth2/IDP/access_token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--header 'Authorization: Basic ***************' \
--data-urlencode 'grant_type=authorization_code' \
--data-urlencode 'code=***************' \
--data-urlencode 'redirect_uri=https://MYSERVER/swagger/ui/oauth2-redirect.html' \
--data-urlencode 'client_id=PSSSurveilNG'
Мой ответ следующий: Как я могу изменить в Swagger конфигурацию запроса OAuth и удалить добавление параметра client_id?