Как выйти из системы с помощью весенней загрузки JWT - PullRequest
1 голос
/ 28 апреля 2020

Я использую этот пример https://dzone.com/articles/spring-boot-security-json-web-tokenjwt-hello-world для создания API пружинной загрузки с веб-токеном json (JWT). но я не нашел API для принудительного выхода из системы с помощью io.jsonwebtoken maven зависимость.

я использую эту зависимость в pom:


groupId io.jsonwebtoken
artifactId jjwt
version 0.9.1

может кто-нибудь сказать мне об этой зависимости, предоставьте любой выход или отзыв токена API или нет. если нет, предоставьте какое-либо решение для принудительного выхода с помощью этого процесса.

1 Ответ

1 голос
/ 28 апреля 2020

Для выхода из системы можно сделать несколько вещей:

  1. Обычно токены 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

...