我面临春季安全问题2的问题,首先我得到了我的令牌和刷新令牌,一切正常。
但似乎永远不会检查令牌,当它到期时没有刷新请求,没有任何反应,我仍然可以进行身份验证。
我调试了这个问题,我注意到我的OAuth2ClientAuthenticationProcessingFilter在首次验证后从未被调用过。
以下是我如何定义此过滤器:
@Bean
public OAuth2ClientAuthenticationProcessingFilter oAuth2ClientAuthenticationProcessingFilter(){
OAuth2ClientAuthenticationProcessingFilter filter = new OAuth2ClientAuthenticationProcessingFilter("/myApp/**|/api/**");
filter.setRestTemplate(oAuth2RestTemplate);
filter.setTokenServices(tokenService);
return filter;
}
任何帮助都会受到欢迎,这是我在这个问题上挣扎的几个小时
答案 0 :(得分:0)
一旦用户通过了您的应用程序的身份验证(即身份验证设置为SecurityContext),它将保持身份验证,直到http会话过期。它是否已通过OAuth2ClientAuthenticationProcessingFilter或BasicAuthenticationFilter或任何其他身份验证过滤器进行身份验证无关紧要。
例如: - 如果您将会话到期时间设置为30分钟。如果用户从浏览器登录您的应用程序,并通过OAuth 2身份验证对您的应用程序进行身份验证。现在,来自浏览器的下一个请求将在cookie中设置JSESSIONID,服务器将从安全上下文中识别会话已经过身份验证,而不是要求进一步的身份验证。 现在,如果用户在应用程序服务器上的会话过期之前转到Auth提供服务器并撤消令牌,则不会影响对您的应用程序的身份验证。并且用户将保持登录到您的应用程序,直到会话过期(由于30分钟不活动或清除安全上下文或可能的任何其他方式,如清除cookie等。)