我使用Spring安全性和彈簧oauth在我的web應用程序中進行身份驗證(使用jwt令牌)。這工作正常,令牌得到交換,我可以正確登錄。但是,即使令牌登錄,身份驗證也不會過期。當我嘗試重新使用令牌從我的資源服務器獲取資源時,它會返回一個拒絕訪問,因爲令牌不再有效。當令牌不再有效時,彈簧安全OAuth身份驗證不會過期
我的web應用程序是一個有狀態(vaadin)web應用程序。它使用會話的東西很多,我無法繞過使用它。使用OAuth進行身份驗證後,它將使用「以前進行身份驗證:org.springframework.security.oauth2.provider.OAuth2Authentication」來檢查它是否已通過身份驗證,並且我認爲這隻會在會話銷燬之前爲「真實」。
我的rest api是state/sessionless,因此每次都會正確驗證令牌。如果它已經過期,它將會提供一個401。
我發現處理這個的唯一方法是相當醜陋的:如果api返回401,會話失效。但是我想看到的是,web應用程序還檢查每個請求上的令牌的有效性。使用會話時有沒有辦法做到這一點?
這是我的webapp的oauth安全配置部分。
@Configuration
@EnableOAuth2Sso
public class OAuthConfig extends WebSecurityConfigurerAdapter
{
@Override
protected void configure(HttpSecurity http) throws Exception
{
http.csrf().disable()
.authorizeRequests()
.antMatchers("/login**").permitAll()
.anyRequest().authenticated()
.and()
.logout()
.logoutSuccessUrl("/")
.logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
.and()
.exceptionHandling().authenticationEntryPoint((request, response, authException) -> response.sendRedirect("/login"));
}
}
這個問題的任何運氣?似乎不可思議,我們必須手動檢查有效性並刷新令牌 – Seb
我最終放棄了默認的JWT令牌,並通過RemoteTokenRepository使用了檢查令牌endoint –