Перенаправление на указанный c URL-адрес после успешной анонимной авторизации через клиент Spring Security OAuth2 - PullRequest
0 голосов
/ 16 марта 2020

Я использую аутентификацию клиента Spring Security OAuth2 с типом предоставления кода для анонимной аутентификации.

Встроенный OAuth2AuthorizationCodeGrantFilter выполняет перенаправление после успешной аутентификации анонимного участника. Он перенаправляет на URL-адрес, полученный с помощью запроса, хранящегося в RequestCache, или использует URL-адрес по умолчанию (oauth2/code/{registrationId}), извлеченный из параметров запроса.

Код OAuth2AuthorizationCodeGrantFilter, о котором идет речь:

String redirectUrl = authorizationResponse.getRedirectUri();
SavedRequest savedRequest = this.requestCache.getRequest(request, response);
if (savedRequest != null) {
    redirectUrl = savedRequest.getRedirectUrl();
    this.requestCache.removeRequest(request, response);
}
this.redirectStrategy.sendRedirect(request, response, redirectUrl);

Я могу использовать кеш запросов для хранения запроса на перенаправление. Но интерфейс RequestCache не позволяет мне указать произвольный URL-адрес для перенаправления, используется только существующий (неизменяемый) HttpServletRequest.

Мне нужно выполнить перенаправление на указанный c URL-адрес на основе немного деловой логики c. Как я могу форсировать произвольный URL перенаправления?

1 Ответ

0 голосов
/ 08 апреля 2020

Я решил это, вообще не указав URL перенаправления. Вместо этого я использовал URL-адрес авторизации, который OAuth2AuthorizationCodeGrantFilter использует по умолчанию.

Я зарегистрировал два RequestMappings в RestController по пути /authorize/oauth2/code/{providerId}, один с params = "!error", а второй с params = "error". Поскольку фильтры OAuth ничего не делают с запросом на перенаправление (поскольку он отбирается из параметров oauth), эти два сопоставления можно использовать в качестве обработчиков авторизации Успех и Отказ.

С другой стороны, я открыл выпуск в пружинной защите для поддержки инъекций RequestCache, что обеспечит надлежащий правильный механизм перенаправления. Эта проблема, похоже, уже решена, но содержит два других возможных обходных пути.

...