私はWebアプリケーションで(jwtトークンを使用して)認証するためにSpringセキュリティとSpring oauthを使用しています。これは正常に動作し、トークンが交換され、正しくログインできます。しかし、一度ログインすると、トークンがあっても認証は失効しません。リソースサーバーからリソースを取得するためにトークンを再利用しようとすると、トークンが有効でなくなったためアクセスが拒否されます。春のセキュリティトークンが有効でなくなったときにOAuth認証が有効期限切れにならない
私のウェブアプリケーションはステートフル(vaadin)ウェブアプリケーションです。それは、たくさんのもののためにセッションを使用して、私はそれを回避することはできません。 OAuthを使用した認証後、認証されたかどうかを確認するために "以前に認証されたorg.springframework.security.oauth2.provider.OAuth2Authentication"が使用されます。セッションが破棄されるまで、これはちょうど "真"になります。
私の残りのAPIは状態/セッションなしであり、毎回トークンを正しく検証します。有効期限が切れていれば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経由でチェックトークンエンドポイントを使用しました –