【问题标题】:OAuth2ClientAuthenticationProcessingFilter is not called after first authentication首次身份验证后不调用 OAuth2ClientAuthenticationProcessingFilter
【发布时间】:2018-04-29 20:50:45
【问题描述】:

我遇到了 spring security oauth 2 的问题,在第一次连接时,我得到了我的令牌和刷新令牌,一切正常。

但似乎从未检查过令牌,当它过期时不会发出刷新请求,什么也没发生,我仍然通过身份验证。

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

这是我如何定义这个过滤器:

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

欢迎任何帮助,我在这方面苦苦挣扎了几个小时

【问题讨论】:

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


    【解决方案1】:

    一旦用户通过您的应用程序的身份验证(即身份验证设置为 SecurityContext),它将保持身份验证,直到 http 会话过期。是否经过 OAuth2ClientAuthenticationProcessingFilter 或 BasicAuthenticationFilter 或任何其他身份验证过滤器的身份验证都没有关系。

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

    【讨论】:

    • 不应该链接到我的会话,我的令牌是 10 分钟的令牌,我不希望它持续更长时间。
    • 从我的角度来看,会话只是存储令牌的地方,它不应该与令牌寿命有任何关系
    • 真正的会话与令牌寿命无关。如果您可以让我知道您的用例,我将能够更好地研究它。
    • 不用担心,这是一个非常经典的用例,我有一个远程 oauth 服务器提供访问令牌和刷新令牌(每个 10 分钟和 1 小时),一旦我的令牌过期,我希望它被刷新目前,如果令牌过期,则不会调用我的过滤器 OAuth2ClientAuthenticationProcessingFilter
    • 那么,您可能应该尝试将会话创建策略设置为“从不”或“无状态”。以确保每个请求都经过重新身份验证。 (参考-baeldung.com/spring-security-session)。因为您的服务器无法知道您的令牌何时到期或是否已被撤销。
    猜你喜欢
    • 1970-01-01
    • 2019-08-15
    • 1970-01-01
    • 1970-01-01
    • 2015-08-22
    • 1970-01-01
    • 2023-03-04
    • 2021-05-01
    相关资源
    最近更新 更多