#spring-security #spring-security-oauth2
#spring-безопасность #spring-security-oauth2
Вопрос:
У меня проблема с выходом из системы в Spring security и oauth2
Мы защищаем службы REST с помощью spring security OAuth2.Конечные точки токена и rest-api не имеют состояния и не нуждаются в сеансе.Мне нужна моя проверка подлинности только один раз, когда я вызываю службу выхода из системы в rest client, она показывает ответ 200, но не удаляет авторизацию.когда я ввожу имя пользователя и пароль, тот же пользователь должен входить в систему. но не выходить из системы. я также очистил контекст.
вот мой контроллер
`@Path("oauth2/logout")
public class LogoutImpl implements LogoutSuccessHandler{
private TokenStore tokenStore;
@Autowired
public LogoutImpl(TokenStore tokenStore) {
this.tokenStore = tokenStore;
}
public void setTokenStore(TokenStore tokenStore) {
this.tokenStore = tokenStore;
}
@Override
public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication)
throws IOException, ServletException {
removeaccess(request);
SecurityContextHolder.clearContext();
response.getOutputStream().write("ntYou Have Logged Out successfully.".getBytes());}
public void removeaccess(HttpServletRequest req) {
String tokens = req.getHeader("Authorization");
String value = tokens.substring(tokens.indexOf(" ")).trim();
OAuth2AccessToken token = tokenStore.readAccessToken(value.split(" ")[0]);
tokenStore.removeAccessToken(token);
System.out.println("ntAccess Token Removed Successfully!!!!!!!!");
}}
`
Ответ №1:
Я вижу, что вы используете заголовок авторизации, и я предполагаю, что токен является JWT. Не существует концепции удаления или отмены JWT. Он должен истечь сам по себе. Есть люди с мнениями, которые указали бы, что это недостаток, когда сервер не может отозвать токен и не может использоваться для корпоративных приложений.
Когда тот же токен используется клиентом в другом API и сервер анализирует токен, и если он находится в пределах срока действия и не поврежден, он будет подтвержден как TRUE.
Однако ситуация будет другой, и ответ будет неактуальным, если вы не используете JWT.