在后端代理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登录名的请求(进入“服务”参数)。要无国籍。
我尝试了此更改:
sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
targetUrlParameter
:SimpleUrlAuthenticationSuccessHandler handler = new SimpleUrlAuthenticationSuccessHandler();
handler.setTargetUrlParameter("redirect_uri");
casAuthenticationFilter.setAuthenticationSuccessHandler(handler);
authenticateAllArtifacts
至true
的集合登录成功后(使用redirect_uri),我的后端端点被很好地调用。
但是,在验证阶段(当我的后端调用带有服务票证的CAS到/ serviceValidate端点时),我的CAS称我为'INVALID_TICKET',我的票证是未知的。
编辑:[对不起,这是由调试模式引起的(门票寿命很短)导致的错误]但是,当重定向到原始请求时(在我的情况下为Get http://oauth2/jwt-token),它将我视为匿名用户用户。
我希望在不使用HTTP会话的情况下调用CAS,但是实际上我还没有发现该怎么做。