Angular 8: Как обновить токен без токена обновления - PullRequest
1 голос
/ 31 октября 2019

Какой способ обновления токена является предпочтительным, если он не работает с токенами обновления, OAuth и т. Д.?

Я просто создаю JWT, когда пользователь проходит проверку подлинности на основе моего API, действительного в течение нескольких минут.

Затем токен используется в перехватчике для доступа к защищенным маршрутам моего API.

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

Технически это не проблема (также без маркера обновления).

Но безопасно ли просто обновлять его все время? Я думаю, что уже знаю ответ ... это НЕТ.

Я знаю, что работа с токеном обновления является предпочтительным способом.

Но есть ли другой способ? Как вы реализовали такое поведение?

1 Ответ

1 голос
/ 31 октября 2019

Один из подходов заключается в использовании существующего токена в качестве токена обновления.

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

Вы можете декодировать токен, чтобы найти дату и время его истечения. Вы можете продлить его, когда наступит X дней до истечения срока действия или когда вы захотите.

Помните, что вы можете декодировать токены JWT, не зная секретного ключа. Секретный ключ необходим для расшифровки токена, но не для декодирования . Вы можете использовать библиотеку, такую ​​как jwt-decode , чтобы декодировать токен, или написать функцию, чтобы сделать это самостоятельно .

На сервере у вас должен быть APIконечная точка, которая принимает текущий токен JWT и, если он действителен, создает и возвращает новый токен с тем же содержимым.

Но безопасно ли его постоянно обновлять?

Как вы уже знаете, постоянно обновлять его небезопасно. Это связано с тем, что если злонамеренный объект имеет доступ к токену, он может обновить его, чтобы получить новый токен с расширенным сроком действия. Этот новый токен можно использовать для возобновления еще до истечения срока действия. Это может продолжаться до бесконечности, пока мы не определим эти токены и не остановим их обновление.

Несколько шагов, которые вы можете предпринять, чтобы сделать его несколько более безопасным:

  • Отслеживайте количество обновлений для каждогопользователь на бэкэнде и прекратит обновление после достижения порога.
  • Прекратите обновление токенов, выпущенных до X недель или определенного времени.

Таким образом, после некоторых обновлений или после определенного времени, пользовательдолжен снова пройти аутентификацию и получить новый токен.

...