记住没有HTTP会话的目标URL

时间:2019-02-04 15:36:02

标签: spring-security spring-security-oauth2 cas

在后端代理CAS的情况下,我的用户通常具有默认的重定向页面,而不是原始页面。

在应用程序的工作流程中,当我需要从Web应用程序访问资源服务器时,它需要具有由Oauth2服务器(与spring-security-oauth2和spring-security-一起使用)提供的有效JWT令牌。 cas)。如果Oauth2服务器具有该用户的CAS会话,则会为其提供JWT令牌,否则,会将其重定向到CAS登录页面。

在我的Oauth2服务器的spring-security-cas机制中,它在用户填充登录CAS页面时在HTTP会话中存储原始请求(我来自的webapp URI)。如果登录成功,则将用户重定向到我的后端的端点,并且先前存储的请求用于构建重定向到我的Web应用程序(https://docs.spring.io/spring-security/site/docs/current/reference/htmlsingle/#form-login-flow-handling)。

在我的应用程序中,经常发生找不到该存储请求的情况。因为会话已过期。在这种情况下,它将重定向到我的后端的默认页面。

我可以增加服务器的http会话过期时间,但不能解决问题。

对我来说,最好的办法是转发原始URI以查询提交到CAS登录名的请求(进入“服务”参数)。要无国籍。

我尝试了此更改:

  • 在我的http配置中:sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
  • 在我的http配置中,是一个自定义的AuthenticationSuccessHandler,它设置了targetUrlParameter
SimpleUrlAuthenticationSuccessHandler handler = new SimpleUrlAuthenticationSuccessHandler();
handler.setTargetUrlParameter("redirect_uri");
casAuthenticationFilter.setAuthenticationSuccessHandler(handler);
  • 在serviceProperties bean中设置authenticateAllArtifactstrue的集合
  • 使用像Matt这样的'dynamicServiceResolver'自定义AuthenticationDetailsS​​ource和CasAuthenticationEntryPoint,在这里完成:https://stackoverflow.com/a/28592699/8913925

登录成功后(使用redirect_uri),我的后端端点被很好地调用。

但是,在验证阶段(当我的后端调用带有服务票证的CAS到/ serviceValidate端点时),我的CAS称我为'INVALID_TICKET',我的票证是未知的。

编辑:[对不起,这是由调试模式引起的(门票寿命很短)导致的错误]但是,当重定向到原始请求时(在我的情况下为Get http://oauth2/jwt-token),它将我视为匿名用户用户。

我希望在不使用HTTP会话的情况下调用CAS,但是实际上我还没有发现该怎么做。

0 个答案:

没有答案