Хранение токена JWT

Я использую JWT для аутентификации. Теперь я хочу сохранить этот токен, который создается в одном классе, чтобы любой другой класс мог использовать его до истечения сеанса. Как лучше всего это сделать. Мое приложение находится в весенней загрузке. Добавляем еще. Я делаю клиента, который обращается к веб-сервису отдыха с учетными данными для получения токена. Теперь мне нужно где-то хранить этот токен, чтобы его могли использовать дальнейшие запросы на отдых. Можно ли хранить токен в httpSession и извлекать его дальше.

Никогда не храните токен JWT

Mehraj Malik 27.08.2018 09:16

@MehrajMalik Похоже, это на клиенте, которому, безусловно, нужно хранить токен.

chrylis -cautiouslyoptimistic- 27.08.2018 09:19

@MehrajMalik, вы полностью уверены, что говорите, потому что я видел несколько случаев, когда это более чем удобно ...

dbl 27.08.2018 09:20

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

vivek sharma 27.08.2018 09:22

На самом деле это довольно часто задаваемый вопрос людьми, которые плохо знакомы с концепцией аутентификации на основе токенов. Обычно тот факт, что вы НЕ храните JWT, либо упускается из виду, либо не подчеркивается авторами статей. Вы можете прочитать официальную документацию по JWT, чтобы лучше понять, как это работает: jwt.io/introduction

Branislav Lazic 27.08.2018 10:08
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
6
1 146
2

Ответы 2

Обычно не рекомендуется хранить токен JWT, поскольку он должен содержать всю информацию для идентификации и авторизации пользователя службы без попадания на уровень БД / постоянства.

Но, возможно, есть ситуации, когда требуется сохранить его среди пользовательских данных. В этом случае вы можете сохранить его в таблице / коллекции и получить при аутентификации пользователя.

Если вы используете Spring + Spring Security, вы можете заполнить поле token в пользовательской реализации User.

Вы можете получить данные пользователя следующим образом:

CustomUser userDetails = (CustomUser)SecurityContextHolder.getContext().getAuthentication().getPrincipal();

Не рекомендуется хранить токен JWT, чтобы защитить его от CSRF.

Но если вы хотите сохранить или использовать его в любом случае, один из способов весенней загрузки - вы можете просто включить параметр @RequestHeader в любой запрос отдыха со значением «Авторизация», а затем вы можете просто извлечь из него токен jwt и использовать его как по вашей функциональности:

@GetMapping("/abc")
public ResponseEntity<String> getToken(
    @RequestHeader(value = "Authorization")  String authorizationHeader){
    String jwt = authorizationHeader.substring(7);
    //your functionality
    return ResponseEntity.ok("JWT Token successfully retrieved");
}

substring(7) используется, чтобы избавиться от строки "Bearer ", я полагаю? Гарантируется ли, что это всегда 7 символов? В противном случае предпочтительнее разделение пробелами.

benaryorg 03.06.2021 19:31

да, правильно, он используется, чтобы избавиться от строки на предъявителя. Да, предполагается, что к jwt добавляется «предъявитель» и пробел.

Nitin Bisht 03.06.2021 19:37

Другие вопросы по теме