Próbuję znaleźć sposób na unieważnienie tokena OWH2 JWT z implementacją wanilii Spring i JwtTokenStore.Unieważnij JWT Oauth2 Refresh Token
Po pierwsze: czy ktoś może potwierdzić, że nie ma API podobnego do/oauth/token, który pozwala mi odwołać token odświeżania?
chciałem dodać niestandardowe API, które usunąć token odświeżania wzdłuż linii folowing:
OAuth2RefreshToken oauth2RefreshToken=tokenStore.readRefreshToken(refreshToken);
tokenStore.removeRefreshToken(oauth2RefreshToken);
Teraz, patrząc na JwtTokenStore, zauważyłem, że używa ApprovalStore. Dlatego też podjąłem InMemoryApprovalStore do mojego JwtTokenStore. Moja JwtTokenStore instancji to wyglądać następująco:
@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;
};
Wyniki: bez InMemoryApprovalStore mogę uwierzytelniać użytkowników i odświeżyć znaki bez problemów. Jednakże, jak tylko dodam InMemoryApprovalStore do tokena sklepie, zacznę otrzymuję następujący komunikat o błędzie:
{"error":"invalid_grant","error_description":"Invalid refresh token: eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE0NDUwMjQ2MTcsInVzZXJfbmFtZSI6IjYzZjIyYjZlLWU5MGUtNDFjYS1iYzJlLTBmZTgzNmY3MTQ2NyIsImF1dGhvcml0aWVzIjpbIlJPTEVfQURNSU4iLCJST0xFX1VTRVIiXSwianRpIjoiMjgwMDgwNWQtMjk1Zi00ZDQzLWI2NTYtMDNlZWYwMWFkMjg0IiwiY2xpZW50X2lkIjoid2ViLWNsaWVudCIsInNjb3BlIjpbInJlYWQiLCJ3cml0ZSIsInRydXN0Il19.BPC0HqLYjWGM0IFjvsUGGKQ9dyIXSXwMhraCVFIxD0U"}
Moje drugie pytanie brzmi zatem jaki jest właściwy sposób cofnąć token odświeżania?
Edytuj: Znalazłem following thread, który sugeruje, że ApprovalStore jest rzeczywiście sposobem na odwołanie tokenów JWT. Teraz muszę po prostu dowiedzieć się, jak prawidłowo ich używać.
TokenApprovalStore naprawdę nie pozwalają odwołać token odświeżania. Przynajmniej nie z JWTTokenStore. JWTTokenStore.removeRefreshToken wywołań tokenStore.revokeApprovals. I ta metoda z kolei wywołuje tokenStore.findTokensByClientIdAndUserName, która zawsze zwraca pusty zestaw w przypadku JWTTokenStore. – Klaus
Tak, masz rację, ale koncepcja jest taka sama, użyj 'ApprovalStore', a implementacja należy do ciebie – MangEngkus
Jeśli dobrze rozumiem proces zatwierdzania, odwołanie zatwierdzenia oznacza, że aplikacja kliencka nie jest już autoryzowana do" używania " konto, a zatem wszystkie dostęp i odświeżanie tokenów dla użytkownika/klienta zostanie odrzucone. Ale czy nie jest to zbyt rygorystyczne, jeśli chcesz tylko unieważnić pojedynczy token odświeżania? Odwołanie zatwierdzenia oznacza, że użytkownik nie może już nic robić. Ponadto, gdy tylko użytkownik ponownie zatwierdzi klienta później, można ponownie użyć wszystkich tokenów dostępu i odświeżania. Czy nie ma sposobu na odwołanie tokena odświeżania w sposób, który nie blokuje innych uprawnień dostępu i odświeżania tokenów? – Tom