Передача дополнительных параметров запроса / формы через 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 используется.

Другие вопросы по тегам