Когда используется токен No Refresh:
1.При смене пароля: когда пользователь меняет свой пароль, обратите внимание на время смены пароля в базе данных пользователя, поэтому, когда время смены пароля превышает время создания токена, токен недействителен. Следовательно, оставшаяся сессия скоро выйдет из системы.
2.Когда пользователь выходит из системы: когда пользователь выходит из системы, сохраните токен в отдельной БД (скажем: InvalidTokenDB и удалите токен из БД, когда истечет срок действия токена). Следовательно, пользователь выходит из соответствующего устройства, его сеансы на другом устройстве остаются нетронутыми.
Следовательно, при аннулировании JWT я выполняю следующие шаги:
- Проверьте, действителен ли токен.
- Если он действителен, проверьте, присутствует ли он в invalidTokenDB (базе данных, где токены, вышедшие из системы, хранятся до истечения срока их действия).
- Если его нет, проверьте время создания токена и время смены пароля в базе данных пользователя.
- Если время смены пароля ‹ время создания токена, то токен действителен.
Отношение к описанному выше методу:
- Для каждого запроса API мне нужно выполнить все вышеперечисленные шаги, которые могут повлиять на производительность.
При использовании токена обновления: с истечением срока действия токена доступа 1 день, токен обновления действует как пожизненный.
<сильный>1. При смене пароля: когда пользователь меняет свой пароль, измените токен обновления пользователя. Следовательно, оставшаяся сессия скоро выйдет из системы.
<сильный>2. Когда пользователь выходит из системы: когда пользователь выходит из системы, сохраните токен в отдельной БД (скажем: InvalidTokenDB и удалите токен из БД по истечении срока действия токена). Следовательно, пользователь выходит из соответствующего устройства, его сеансы на другом устройстве остаются нетронутыми.
Следовательно, при аннулировании JWT я выполняю следующие шаги:
- проверить, действителен ли токен или нет
- Если он действителен, проверьте, присутствует ли токен в InvalidTokenDB.
- Если он отсутствует, проверьте токен обновления с помощью токена обновления в userDB.
- Если равно, то это действительный токен
Отношение к описанному выше методу:
- Для каждого запроса API мне нужно выполнить все вышеперечисленные шаги, которые могут повлиять на производительность.
- Как сделать недействительным токен обновления, поскольку токен обновления недействителен, если он используется хакером, но аутентификация остается действительной, запрос всегда будет успешным.
Примечание. Хотя Ханц предложил способ защитить токен обновления в Использование токена обновления в аутентификации на основе токенов защищено? , я не мог понять, что он говорит. Любая помощь приветствуется.
Итак, если у кого-то есть хорошее предложение, ваши комментарии приветствуются.
ОБНОВЛЕНИЕ: я добавляю ответ, если вашему приложению не нужен токен обновления с истечением срока действия. Этот ответ был дан Sudhanshu (https://stackoverflow.com/users/4062630/sudhanshu-gaur). Спасибо Судханшу. Поэтому я считаю, что это лучший способ сделать это,
Когда не требуется токен обновления и не истек срок действия токена доступа:
когда пользователь входит в систему, создайте токен входа в его пользовательскую базу данных без срока действия.
Следовательно, при аннулировании JWT выполните следующие шаги:
- получить информацию о пользователе и проверить, находится ли токен в его базе данных пользователей. Если да, то разрешите.
- Когда пользователь выходит из системы, удалите только этот токен из его пользовательской базы данных.
- Когда пользователь меняет свой пароль, удалите все токены из своей пользовательской базы данных и попросите его снова войти в систему.
Таким образом, при таком подходе вам не нужно хранить ни токены выхода в базе данных до истечения срока их действия, ни сохранять время создания токена при смене пароля, который был необходим в вышеуказанных случаях. Однако я считаю, что этот подход действителен только в том случае, если у вашего приложения есть требования без необходимости токена обновления и без истечения срока действия токенов.
Если у кого-то есть проблемы с этим подходом, пожалуйста, дайте мне знать. Ваши комментарии приветствуются :)
person
Gopinath Shiva
schedule
02.03.2015