首次身份验证后不会调用OAuth2ClientAuthenticationProcessingFilter

时间:2017-11-16 10:44:47

标签: spring spring-security oauth-2.0 spring-oauth2

我面临春季安全问题2的问题,首先我得到了我的令牌和刷新令牌,一切正常。

但似乎永远不会检查令牌,当它到期时没有刷新请求,没有任何反应,我仍然可以进行身份​​验证。

我调试了这个问题,我注意到我的OAuth2ClientAuthenticationProcessingFilter在首次验证后从未被调用过。

以下是我如何定义此过滤器:

@Bean
    public OAuth2ClientAuthenticationProcessingFilter oAuth2ClientAuthenticationProcessingFilter(){
        OAuth2ClientAuthenticationProcessingFilter filter =  new OAuth2ClientAuthenticationProcessingFilter("/myApp/**|/api/**");
        filter.setRestTemplate(oAuth2RestTemplate);
        filter.setTokenServices(tokenService);
        return filter;
    }

任何帮助都会受到欢迎,这是我在这个问题上挣扎的几个小时

1 个答案:

答案 0 :(得分:0)

一旦用户通过了您的应用程序的身份验证(即身份验证设置为SecurityContext),它将保持身份验证,直到http会话过期。它是否已通过OAuth2ClientAuthenticationProcessingFilter或BasicAuthenticationFilter或任何其他身份验证过滤器进行身份验证无关紧要。

例如: - 如果您将会话到期时间设置为30分钟。如果用户从浏览器登录您的应用程序,并通过OAuth 2身份验证对您的应用程序进行身份验证。现在,来自浏览器的下一个请求将在cookie中设置JSESSIONID,服务器将从安全上下文中识别会话已经过身份验证,而不是要求进一步的身份验证。 现在,如果用户在应用程序服务器上的会话过期之前转到Auth提供服务器并撤消令牌,则不会影响对您的应用程序的身份验证。并且用户将保持登录到您的应用程序,直到会话过期(由于30分钟不活动或清除安全上下文或可能的任何其他方式,如清除cookie等。)