Для выхода из системы можно сделать несколько вещей:
- Обычно токены jwt хранятся в локальном хранилище браузера или в хранилище сеансов, если мы говорим об одностраничных приложениях. Итак, первое, что можно сделать в этом случае - удалить токен из хранилища:
window.sessionStorage.removeItem ("token") // для хранения сеанса
или
window.localstorage.removeItem ("token") // для локального хранилища
Ссылка на них: https://developer.mozilla.org/ru/docs/Web/API/Window/sessionStorage https://developer.mozilla.org/ru/docs/Web/API/Window/localStorage
Мой пример в angular: https://github.com/dmcheremisin/TodoApp/blob/master/frontend/src/app/service/jwt-authentication.service.ts
Но клиент может хранить этот токен где-то и предоставлять вручную. Чтобы избежать длительного использования токена, вы должны установить короткое время истечения. Например, 15 минут.
Если вам нужно разрешить дальнейшее использование токена - вы обновите sh его, в противном случае отклоните.
Пример refre sh метод:
public String refreshToken(String token) {
final Date createdDate = new Date();
final Date expirationDate = calculateExpirationDate(createdDate);
final Claims claims = getAllClaimsFromToken(token);
claims.setIssuedAt(createdDate);
claims.setExpiration(expirationDate);
return Jwts.builder().setClaims(claims).signWith(SignatureAlgorithm.HS512, secret).compact();
}
Этот фрагмент кода из моего репозитория использует ту же библиотеку jjwt: https://github.com/dmcheremisin/TodoApp/blob/master/backend/src/main/java/com/todo/app/util/JwtTokenUtil.java
В черный список вышли токены. Мне лично не нравится этот подход, потому что вам нужно централизованное место для занесенных в черный список токенов в случае многоузлового приложения. Токены JWT были созданы для того, чтобы избежать связи с сеансом конкретного сеанса веб-сервера (узла). Таким образом, вы не можете хранить токены только в одном узле вашего приложения.
Статья по теме: https://medium.com/devgorilla/how-to-log-out-when-using-jwt-a8c7823e8a6