我正在使用JHipster生成的Spring Social和Spring Security构建单页应用程序。
我尝试在某个社交身份验证提供程序对用户进行身份验证后捕获原始查询参数。
示例:
调用/ signin / someprovider?show = someEntityId 并在成功验证后将用户重定向到/ signup /,我需要一种方法来获取“ someEntityID ”。< / p>
我假设不同的http调用使得传递/存储参数变得困难。 是否有一些我可以使用/重用的Spring内置功能,或者如何解决这个问题?
更新
请求的主题如下:
(1)浏览器 - &gt; http://localhost:9060/signin/authenticationProvider?show=**someEntityId**
&lt; - 重定向到https://authenticationProvider... &state=SomeState
(2)浏览器 - &gt; https://authenticationProvider
&lt; - 重定向到http://localhost:9060/signin/google?state=SomeState&code=SomeCode
(3)浏览器 - &gt; http://localhost:9060/signin/authenticationProvider?state=SomeState&code=SomeCode
&lt; - 重定向到http://localhost:9060/social/signup
(4)浏览器 - &gt; 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 with several parameters,show = someEntityId 参数应该在Oauth2请求的状态参数中进行编码才能生存 从(1)到(3)。在(3)中,必须将状态参数添加到重定向uri,以便可以在(4)中解码原始参数。
看起来很多工作,或者我错过了什么?如果有一种方法可以有一个会话变量,我可以将参数存储在(1)并在(4)中再次获取它,这将是很好的。
答案 0 :(得分:0)
从1.1.3版开始,Spring Social会自行创建state参数并将其用作CSRF令牌,请参见https://pivotal.io/security/cve-2015-5258-因此,您可以(也不应)在state参数中编码其他参数。
相反,如果通过ProviderSignInController
启用了提供者标志,则可以使用ProviderSignInInterceptor
在会话中(preSignIn(...)
和postSignIn(...)
中)中间存储此类参数。
如果使用SocialAuthenticationFilter
,我想也有类似的方法。