Я учусь кодировать уже год.В основном я научился работать с API отдыха (Node / Express на бэк-энде и Vue на фронт-энде).
Я дошел до того, что хочу развить идеи, которые у меня есть для приложения.
Для этого я сначала хотел разработать бэкэнд для процесса аутентификации, который я мог бы использовать как образец для другого проекта, который у меня был бы.
Но теперь я полностью потерян с Jsonwebtoken икак точно использовать его для того, чтобы сделать что-то безопасное и удобное для пользователя.
До сих пор я понимаю, что оставшийся API должен быть без сохранения состояния (т. е. ничто не должно быть хранилищем на стороне сервера и поэтому не должно иметь БДпризывает - как для сеансов - предоставлять доступ к данным).
В этом отношении я отметил различные стратегии:
Краткосрочный JWT: (+)это очень безопасно, так как теоретически вам нужно входить в систему каждый раз, когда вы хотите получить доступ к серверу (-) очень плохой пользовательский опыт
Долгоживущий JWT: (+) удобный для пользователя (постоянный вход) (-) очень вбезопасный (невозможно проверить, был ли украден JWT)
недолговечный JWT с долгоживущим токеном обновления ...
Вот где я получаюпутать ...
Из всех прочитанных мной статей / руководств токен обновления должен быть каким-либо образом связан с БД (например, для хранения ключа токена обновления или токена в черном списке ...).Я также видел учебник, который частично связывал секретный ключ (для проверки токена) с хешированным паролем, хранящимся в БД.Это довольно умно, так как предыдущий токен будет автоматически считаться недействительным с того момента, как пользователь меняет свой пароль ... Но это еще раз означает, что вызов БД ...
Я хочу сказать, что я пришел к выводучто (1) не существует идеального способа управления процессом аутентификации безопасным и удобным для пользователя способом (2) нельзя избежать вызовов в БД, чтобы иметь что-то немного безопасное ...
И, учитывая этот вывод, я определенноЯ не могу понять, как использовать токен обновления…
Если для токенов обновления требуются вызовы БД, вы можете получить тот же результат только с одним основным токеном…
Вы можете, например, сохранить идентификатор JWTв токене и в БД ... Если эти два идентификатора совпадают при проверке токена, вы выпускаете новый токен с новым идентификатором, который перезаписывает предыдущий ... Теперь, если вы используете старый, он никогда не будет проверен ... Затем,так как вы вызвали БД для проверки токена (скорее всего, таблицы USER), вы можете проверить в то же время, если,например, пользователь является администратором или нет (нет необходимости хранить его в JWT)… Наконец, вы можете использовать описанный выше прием «хешированный пароль» для повышения безопасности…
Итак… Чего мне не хватает?Какова лучшая стратегия?
Я буду рад получить ваши комментарии по этому поводу (или ссылку на очень хорошую статью - хотя у меня их много…)
СпасибоВы очень за вашу помощь
PS: и я даже не говорю о том, как отправить токен на сервер (с cookie, но с риском присоединения CSRF или с заголовком, но подвергается атаке XSS, если токен хранитсяна стороне клиента)… В этом отношении я видел несколько обучающих программ, в которых используется JWT через cookie с сохранением клиентского ключа cerf на стороне клиента, а также внутри jet => оба должны быть отправлены.
PS2: надеюсь, я 'Я ясно, так как я говорю по-французски: -)