Передача дополнительных параметров запроса / формы через Spring Social
Я создаю одностраничное приложение, используя Spring Social и Spring Security, сгенерированные JHipster.
Я пытаюсь получить исходные параметры запроса после того, как пользователь прошел проверку подлинности с помощью какого-либо поставщика социальной проверки подлинности.
Пример:
Вызов / signin / someprovider? show =someEntityId и после успешной аутентификации перенаправляет пользователя в /signup/, мне нужен способ получить 'someEntityID'.
Я предполагаю, что различные вызовы http затрудняют передачу / хранение параметров. Есть ли какая-то встроенная функциональность Spring, которую я могу использовать / использовать повторно или как решить эту проблему?
ОБНОВИТЬ
Поток запросов выглядит так:
(1) браузер-> http://localhost:9060/signin/authenticationProvider?show=**someEntityId**
<- перенаправить на https://authenticationProvider... &state=SomeState
(2) браузер -> https://authenticationProvider
<- перенаправить на http://localhost:9060/signin/google?state=SomeState&code=SomeCode
(3) браузер-> http://localhost:9060/signin/authenticationProvider?state=SomeState&code=SomeCode
<- перенаправить на http://localhost:9060/social/signup
(4) браузер -> http://localhost:9060/social/signup
Это заканчивается в
@GetMapping("/signup")
public RedirectView signUp(WebRequest webRequest, @CookieValue(name = "NG_TRANSLATE_LANG_KEY", required = false, defaultValue = Constants.DEFAULT_LANGUAGE) String langKey) {
try {
Connection<?> connection = providerSignInUtils.getConnectionFromSession(webRequest);
socialService.createSocialUser(connection, langKey.replace("\"", ""));
В этот момент он хочет вызвать функцию с исходным параметром someEntityId.
Согласно google oauth2 redirect_uri с несколькими параметрами, параметр? Show =someEntityId должен быть закодирован в параметре состояния запроса Oauth2, чтобы выжить с (1) по (3). В (3) параметр состояния должен быть добавлен в URI перенаправления, так что исходный параметр может быть декодирован в (4).
Похоже, много работы, или я что-то упустил? Было бы хорошо, если бы был способ иметь переменную сеанса, в которой я мог бы хранить параметры в (1) и извлекать их снова, когда в (4).
0 ответов
Поскольку версия 1.1.3 Spring Social создает параметр состояния самостоятельно и использует его в качестве токена CSRF, см. https://pivotal.io/security/cve-2015-5258 - поэтому вы можете (и не должны) кодировать дополнительные параметры. в параметре состояния.
Вместо этого, если знак поставщика включен с ProviderSignInController
, ProviderSignInInterceptor
может использоваться для промежуточного хранения таких параметров в сеансе (в preSignIn(...)
а также postSignIn(...)
).
Я думаю, что есть аналогичный подход, если SocialAuthenticationFilter
используется.