Учетные данные пароля владельца ресурса с помощью Spring Boot - PullRequest
1 голос
/ 06 января 2020

У меня есть устаревшее настольное приложение, которое взаимодействует с сервером Spring Boot (последняя версия 2.2.2.RELEASE). Я использую OAuth2 для аутентификации (предоставляется spring-boot-starter-oauth2-client). Я хочу избежать изменения клиента, потому что это устаревшее приложение. Он способен собирать учетные данные и запускать сеанс через HTTP Basi c Authentication, а затем сохранять файлы cookie для сеанса в следующих запросах.

Учитывая этот сценарий, я думаю, что лучшим вариантом является использование предоставление учетных данных пароля владельца ресурса OAuth2. Благодаря этому мы можем обменять собранные учетные данные с помощью токенов OAuth2. У нас есть два варианта:

Вариант 1:

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

Опция 2:

Продолжайте использовать сеанс Spring и сохраняйте информация о клиенте OAuth на сервере.

Я обнаружил, что этот проект ПОЧТИ выполняет: https://github.com/jgrandja/spring-security-oauth-5-2-migrate. У него есть клиент (messaging-client-password), определенный с помощью authorization-grant-type: password, который активирует грант «Учетные данные пароля владельца ресурса OAuth2» в Spring Boot.

Он создает клиента OAuth2 и сохраняет его информацию в сеансе, тогда Spring возможность использовать этот клиент в дальнейших запросах. Проблема этого проекта заключается в том, что он работает только тогда, когда клиент OAuth используется для выполнения HTTP-запросов (например, конечная точка, которая выполняет вызов другой службе), а не для проверки подлинности контроллера. Вы можете найти больше информации об этом здесь:

Естественная идея Преодолеть это - внедрить прокси и использовать клиент OAuth2 в запросах. Что ж, Spring уже предлагает прокси-решение Spring Cloud Gateway. Но я не знаю, чтобы совершить sh это с этой настройкой.

Есть идеи? Я правильно думаю или я должен придерживаться другого подхода?

...