Sto cercando di trovare un modo per revocare il token di aggiornamento di Oauth2 JWT con l'implementazione di vanilla spring e JwtTokenStore.Revoke JWT Oauth2 Aggiorna token
Primo: qualcuno può confermare che non ci sono API simili a/oauth/token che mi consentono di revocare un token di aggiornamento?
ho voluto aggiungere un'API personalizzata che potrebbe eliminare il token di aggiornamento lungo le linee folowing:
OAuth2RefreshToken oauth2RefreshToken=tokenStore.readRefreshToken(refreshToken);
tokenStore.removeRefreshToken(oauth2RefreshToken);
Ora, guardando il JwtTokenStore, ho notato che utilizza un ApprovalStore. Così sono andato avanti e ho fornito un InMemoryApprovalStore al mio JwtTokenStore. Il mio JwtTokenStore istanziazione questo sguardo come segue:
@Bean
protected JwtAccessTokenConverter jwtTokenEnhancer() {
JwtAccessTokenConverter converter = new JwtAccessTokenConverter();
converter.setSigningKey("123456");
return converter;
}
@Bean
public JwtTokenStore getTokenStore(){
tokenStore= new JwtTokenStore(jwtTokenEnhancer());
tokenStore.setApprovalStore(new InMemoryApprovalStore());
tokenStore.setTokenEnhancer(jwtTokenEnhancer());
return tokenStore;
};
Risultati: senza InMemoryApprovalStore, posso autenticare gli utenti e aggiornare i token senza problemi. Tuttavia, non appena aggiungo InMemoryApprovalStore al negozio di token, ho iniziare a ricevere il seguente messaggio di errore:
{"error":"invalid_grant","error_description":"Invalid refresh token: eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE0NDUwMjQ2MTcsInVzZXJfbmFtZSI6IjYzZjIyYjZlLWU5MGUtNDFjYS1iYzJlLTBmZTgzNmY3MTQ2NyIsImF1dGhvcml0aWVzIjpbIlJPTEVfQURNSU4iLCJST0xFX1VTRVIiXSwianRpIjoiMjgwMDgwNWQtMjk1Zi00ZDQzLWI2NTYtMDNlZWYwMWFkMjg0IiwiY2xpZW50X2lkIjoid2ViLWNsaWVudCIsInNjb3BlIjpbInJlYWQiLCJ3cml0ZSIsInRydXN0Il19.BPC0HqLYjWGM0IFjvsUGGKQ9dyIXSXwMhraCVFIxD0U"}
mia seconda domanda è quindi qual è il modo corretto di revocare un token di aggiornamento?
Modifica: ho trovato il following thread che suggerisce che ApprovalStore è davvero il modo per revocare i token JWT. Ora ho solo bisogno di scoprire come usarli correttamente.
TokenApprovalStore in realtà non consentono di revoca un token di aggiornamento. Almeno non con JWTTokenStore. JWTTokenStore.removeRefreshToken chiama tokenStore.revokeApprovals. E questo metodo a sua volta chiama tokenStore.findTokensByClientIdAndUserName, che restituisce sempre un set vuoto nel caso di JWTTokenStore. – Klaus
Sì, hai ragione, ma il concetto è lo stesso, usa 'ApprovalStore' e l'implementazione spetta a te – MangEngkus
Se comprendo correttamente il processo di approvazione, revocare l'approvazione significa che l'applicazione client non è più autorizzata ad" usare " l'account e quindi tutti i token di accesso e aggiornamento per l'utente/client verranno rifiutati. Ma non è troppo rigoroso se tutto ciò che vuoi è revocare un singolo token di aggiornamento? Revocare l'approvazione significa che l'utente non può più fare nulla. Inoltre, non appena l'utente ha nuovamente approvato il client in un secondo momento, tutti i token di accesso e di aggiornamento possono essere riutilizzati. Non c'è un modo per revocare un token di aggiornamento in un modo che non blocchi altri access e aggiornare i token? – Tom