11

ログアウトコントローラーでは、コードの組み合わせをたくさん書いてみました。今私はこれを持っています:

final Authentication auth = SecurityContextHolder.getContext().getAuthentication();

if (auth != null) {
    new SecurityContextLogoutHandler().logout(request, response, auth);
}

SecurityContextHolder.getContext().setAuthentication(null);
auth.setAuthenticated(false);

ただし、コード実行トークンを提供した後も有効です。

私は何を間違っていますか?最終的にトークンを取り消す方法は?

4

5 に答える 5

9

お探しのクラスは DefaultServices、メソッドrevokeToken(String tokenValue)です。

これはトークンを取り消すコントローラーの例であり、ここは Beanを使用した oauth2 構成DefaultServicesです。

于 2014-05-14T22:45:21.260 に答える
9

現在のユーザー以外のユーザーのトークンを取り消す必要がある場合 (たとえば、管理者がユーザー アカウントを無効にしたい場合)、これを使用できます。

Collection<OAuth2AccessToken> tokens = tokenStore.findTokensByClientIdAndUserName(
                                                           "my_oauth_client_id", 
                                                           user.getUsername());
for (OAuth2AccessToken token : tokens) {
  consumerTokenServices.revokeToken(token.getValue());
}

tokenStoreあることorg.springframework.security.oauth2.provider.token.TokenStoreconsumerTokenServicesorg.springframework.security.oauth2.provider.token.ConsumerTokenServices

于 2017-03-21T17:00:20.490 に答える
-2

DefaultTokenServices を自動配線してから、次のコードを使用します。

String authHeader = request.getHeader("Authorization");
String tokenValue = authHeader.replace("bearer", "").trim();
tokenService.revokeToken(tokenValue);
tokenService.setAccessTokenValiditySeconds(1);
tokenService.setRefreshTokenValiditySeconds(1);

アクセス トークンを取り消すコードを試してみてください。

于 2016-11-24T12:13:07.230 に答える