通过春季社交传递额外的查询/表单参数



我正在使用JHipster生成的Spring Social和Spring Security构建一个单页应用程序。

我正在尝试在用户通过某些社交身份验证提供程序进行身份验证后捕获原始查询参数。

例:

调用/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的函数。

根据谷歌oauth2 redirect_uri有几个参数,?show=someEntityId参数应该编码在Oauth2请求的状态参数中,以便生存 从(1)到(3)。在 (3) 中,必须将状态参数添加到重定向 uri 中,以便可以在 (4) 中解码原始参数。

看起来工作量很大,还是我错过了什么?如果有一种方法可以拥有一个会话变量,我可以在其中将参数存储在 (1) 并在 (4) 中再次获取它们,那就太好了。

由于版本1.1.3 Spring Social 自行创建状态参数并将其用作 CSRF 令牌,请参阅 https://pivotal.io/security/cve-2015-5258 - 因此您可以(也不应该)在状态参数中编码其他参数。

相反,如果使用ProviderSignInController启用了提供程序签名,则可以使用ProviderSignInInterceptor在会话中中间存储这些参数(以preSignIn(...)postSignIn(...))。

我想如果使用SocialAuthenticationFilter,也有类似的方法。

最新更新