Лучшие практики для аннулирования JWT при смене паролей и выходе из системы в node.js?

Я хотел бы узнать, как лучше всего аннулировать JWT, не нажимая db при смене пароля/выхода из системы.

У меня есть идея ниже, чтобы обработать выше 2 случая, нажав на пользовательскую базу данных.

1. В случае изменения пароля я проверяю пароль (хешированный), хранящийся в базе данных пользователя.

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

Но эти 2 случая происходят за счет попадания в базу данных пользователя каждый раз, когда пользователь обращается к API. Любая передовая практика приветствуется.

ОБНОВЛЕНИЕ: я не думаю, что мы сможем аннулировать JWT, не нажимая db. Поэтому я придумал решение. Я опубликовал свой ответ, если у вас есть какие-либо опасения, пожалуйста.


person Gopinath Shiva    schedule 27.02.2015    source источник
comment
Вы не можете этого сделать. Не используйте JWT, если вам нужен отзыв. Как правило, не используйте JWT в качестве замены сеансов. Это не их предназначение, и они не являются хорошей заменой сеансам. См. developer.okta.com/blog. /2017/08/17/   -  person meagar    schedule 18.02.2021


Ответы (5)


Когда используется токен No Refresh:

1.При смене пароля: когда пользователь меняет свой пароль, обратите внимание на время смены пароля в базе данных пользователя, поэтому, когда время смены пароля превышает время создания токена, токен недействителен. Следовательно, оставшаяся сессия скоро выйдет из системы.

2.Когда пользователь выходит из системы: когда пользователь выходит из системы, сохраните токен в отдельной БД (скажем: InvalidTokenDB и удалите токен из БД, когда истечет срок действия токена). Следовательно, пользователь выходит из соответствующего устройства, его сеансы на другом устройстве остаются нетронутыми.

Следовательно, при аннулировании JWT я выполняю следующие шаги:

  1. Проверьте, действителен ли токен.
  2. Если он действителен, проверьте, присутствует ли он в invalidTokenDB (базе данных, где токены, вышедшие из системы, хранятся до истечения срока их действия).
  3. Если его нет, проверьте время создания токена и время смены пароля в базе данных пользователя.
  4. Если время смены пароля ‹ время создания токена, то токен действителен.

Отношение к описанному выше методу:

  1. Для каждого запроса API мне нужно выполнить все вышеперечисленные шаги, которые могут повлиять на производительность.

При использовании токена обновления: с истечением срока действия токена доступа 1 день, токен обновления действует как пожизненный.

<сильный>1. При смене пароля: когда пользователь меняет свой пароль, измените токен обновления пользователя. Следовательно, оставшаяся сессия скоро выйдет из системы.

<сильный>2. Когда пользователь выходит из системы: когда пользователь выходит из системы, сохраните токен в отдельной БД (скажем: InvalidTokenDB и удалите токен из БД по истечении срока действия токена). Следовательно, пользователь выходит из соответствующего устройства, его сеансы на другом устройстве остаются нетронутыми.

Следовательно, при аннулировании JWT я выполняю следующие шаги:

  1. проверить, действителен ли токен или нет
  2. Если он действителен, проверьте, присутствует ли токен в InvalidTokenDB.
  3. Если он отсутствует, проверьте токен обновления с помощью токена обновления в userDB.
  4. Если равно, то это действительный токен

Отношение к описанному выше методу:

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

Примечание. Хотя Ханц предложил способ защитить токен обновления в Использование токена обновления в аутентификации на основе токенов защищено? , я не мог понять, что он говорит. Любая помощь приветствуется.

Итак, если у кого-то есть хорошее предложение, ваши комментарии приветствуются.

ОБНОВЛЕНИЕ: я добавляю ответ, если вашему приложению не нужен токен обновления с истечением срока действия. Этот ответ был дан Sudhanshu (https://stackoverflow.com/users/4062630/sudhanshu-gaur). Спасибо Судханшу. Поэтому я считаю, что это лучший способ сделать это,

Когда не требуется токен обновления и не истек срок действия токена доступа:

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

Следовательно, при аннулировании JWT выполните следующие шаги:

  1. получить информацию о пользователе и проверить, находится ли токен в его базе данных пользователей. Если да, то разрешите.
  2. Когда пользователь выходит из системы, удалите только этот токен из его пользовательской базы данных.
  3. Когда пользователь меняет свой пароль, удалите все токены из своей пользовательской базы данных и попросите его снова войти в систему.

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

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

person Gopinath Shiva    schedule 02.03.2015
comment
Я придумал тот же подход, что и ваш, но вы также должны добавить время истечения срока действия в поле смены пароля, см. мой ответ ниже :) - person Sudhanshu Gaur; 11.01.2016
comment
и вместо обычной базы данных вы можете использовать Redis, поскольку он находится в кеше памяти, поэтому время поиска будет очень меньше - person Sudhanshu Gaur; 11.01.2016
comment
если время создания токена предшествует времени изменения пароля, не должен ли токен быть недействительным? - person el_pup_le; 29.04.2016
comment
@amiawizard, могу я узнать, о каком сценарии вы говорите? Я считаю, что ответил на вопрос, когда пользователь меняет свой пароль, обратите внимание на время смены пароля в базе данных пользователя, поэтому, когда время смены пароля превышает время создания токена, то токен недействителен. Следовательно, оставшаяся сессия скоро выйдет из системы. - person Gopinath Shiva; 02.05.2016
comment
Разве поиск в базе данных/хранилище данных не противоречит цели JWT? - person Metalstorm; 04.08.2016
comment
Я бы сделал это немного по-другому: хранил каждый токен, который вы создаете, в базе данных. Теперь, когда пользователь меняет свой пароль, найдите токен в базе данных и поместите его в «недопустимый список токенов». Этот список можно сохранить в базе данных или (гораздо лучше) в локальном кэше Redis. Заполните кеш Redis при запуске и добавьте обновление базы данных. Когда через несколько минут происходит выход из системы, вы можете выполнить статическую синхронизацию, которая проверяет базу данных каждые 5 минут, какова дата последнего обновления. - person sigi; 19.12.2016
comment
@TheQuantumPhysicist, просто добавив токен в какую-то базу данных черного списка при смене пароля или выходе из системы, добьется цели. Ответ описывает это как вариант. Вместо того, чтобы критиковать, может быть, постараемся уточнить немного больше. В конце концов, у вас есть два варианта: либо аннулировать токены обновления, либо аннулировать токены доступа. Оба варианта требуют доступа к базе данных. Независимый/автономный характер JWT делает невозможным аннулирование их по требованию. Печально, что многие люди советуют использовать токены, но забывают упомянуть, что для этого нужно, например, если вам нужны такие функции, как выход из системы. - person Konrad; 30.08.2018
comment
Вы также можете просто добавить столбец, если вы используете СУБД, добавить столбец в таблицу ваших пользователей, например access_token, и когда пользователь выйдет из системы, просто очистите этот токен. Когда пользователь входит в систему, обновите столбец новым сгенерированным токеном. - person Konrad; 30.08.2018
comment
JWT — это просто формат токена, и основная причина его использования — обмен информацией (претензиями). Мне нравится думать об этом как о каком-то удостоверении личности с определенным сроком действия. - person Konrad; 30.08.2018

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

Будьте осторожны с подходом 2, если к вашему сервису можно получить доступ на нескольких устройствах. Рассмотрим следующий сценарий...

  • Пользователь входит в систему с помощью iPad, токен 1 выдается и сохраняется.
  • Пользователь авторизуется на сайте. Выпущен токен 2. Пользователь выходит из системы.
  • Пользователь пытается использовать iPad, токен 1 был выпущен до того, как пользователь вышел из веб-сайта, токен 1 теперь считается недействительным.

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

Также см. здесь хорошее обсуждение SO относительно аналогичной проблемы , конкретное решение IanB, которое сэкономит некоторые вызовы БД.

Предлагаемое решение Лично я бы подошел к этому так... пользователь аутентифицируется, выдается токен доступа с коротким сроком действия (скажем, 15 минут) и токен обновления, действительный либо в течение гораздо более длительного периода, либо на неопределенный срок. Сохраните запись этого токена обновления в базе данных.

Всякий раз, когда пользователь «активен», каждый раз выдавать новый токен аутентификации (действителен в течение 15 минут каждый раз). Если пользователь неактивен более 15 минут, а затем делает запрос (поэтому использует jwt с истекшим сроком действия), проверьте действительность токена обновления. Если он действителен (включая проверку базы данных), выдайте новый токен аутентификации.

Если пользователь «выходит из системы» либо на устройстве, либо через веб-сайт, уничтожьте оба токена обновления доступа на стороне клиента и, что важно, отмените действительность используемого токена обновления. Если пользователь меняет свой пароль на каком-либо устройстве, отмените все свои токены обновления, заставив их снова войти в систему, как только истечет срок действия их токена доступа. Это оставляет «окно неопределенности», но это неизбежно, если каждый раз не нажимать db.

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

person DevFox    schedule 27.02.2015
comment
Благодарим вас за отзыв о втором подходе. Решение IanB обеспечивает хорошую практику при смене пароля, но я все еще не понимаю логики, когда пользователь выходит из системы. Как вы объяснили, когда пользователь выходит из системы, он должен выйти только в текущей системе, как я могу этого добиться? - person Gopinath Shiva; 27.02.2015
comment
@gopinathshiva См. новое предлагаемое решение выше. Это ограничивает количество обращений к базе данных, но должно обеспечивать требуемую функциональность. - person DevFox; 28.02.2015
comment
Когда пользователь выходит из системы, как мне уничтожить все существующие токены на стороне клиента? Также, если я это сделаю, он выйдет из системы на всех устройствах. Но тем не менее, эти токены находятся в действительном состоянии. Если хакер использует этот токен, все равно аутентификация будет действительной (предположим, что токен действителен в течение 1 недели). Это не то, что мне нужно. Я хотел бы выйти из системы только на соответствующем устройстве, но токен также должен быть защищен - person Gopinath Shiva; 02.03.2015
comment
Я согласен с вашим ответом об отзыве токена обновления при смене паролей. Но если я отзову токен обновления, когда пользователь выйдет из системы, он выйдет из системы на всех устройствах, и пользователю придется снова войти в систему. - person Gopinath Shiva; 02.03.2015
comment
Я разместил свое решение ниже, обновил вопрос, и у меня также есть соответствующие опасения по поводу моего предложенного ответа. Ваши комментарии приветствуются. - person Gopinath Shiva; 02.03.2015
comment
@gopinathshiva Когда я говорю «уничтожить существующие токены» при выходе из системы, я имею в виду удаление любых записей о токенах доступа/обновления из хранилища на этом конкретном устройстве — да, токен доступа все еще будет действительным, если бы кто-то имел к нему доступ. В своем решении я предлагаю использовать недолговечные токены доступа, чтобы ограничить это «окно» возможностей (которое существует всегда). Я бы предположил, что предоставленное вами решение действительно полностью теряет смысл jwts. - person DevFox; 05.03.2015
comment
@gopinathshiva Что касается вашей точки зрения об отзыве токенов обновления для принудительного входа в систему ... Мне, вероятно, было непонятно, что вы должны выпускать (и записывать) разные токены обновления для каждого устройства. Поэтому, когда пользователь выходит из системы на определенном устройстве, аннулируйте этот конкретный токен обновления. Если пользователь меняет пароль и т. д., аннулируйте все токены обновления этого пользователя. - person DevFox; 05.03.2015
comment
У нас есть много токенов обновления для одного пользователя. Я думал, что у пользователя может быть много токенов доступа и один токен обновления. Поправьте меня если я ошибаюсь - person Gopinath Shiva; 05.03.2015
comment
«Я бы предположил, что предложенное вами решение действительно полностью теряет смысл jwts». - Я не понимаю, что вы имеете в виду, не могли бы вы объяснить, о каком решении вы говорите. Я не хотел бы иметь недолговечный токен доступа, поэтому я предложил это решение - person Gopinath Shiva; 05.03.2015
comment
«Относительно вашей точки зрения об отзыве токенов обновления для принудительного входа в систему ... Мне, вероятно, не было ясно, что вы должны выдавать (и записывать) разные токены обновления для каждого устройства» - я думаю, что вы ошибаетесь, я предоставил решение с учетом пользователь может иметь один токен обновления и несколько токенов доступа. - person Gopinath Shiva; 05.03.2015
comment
Без обид, но я не думаю, что ошибаюсь — токены обновления могут быть привязаны к пользователю или комбинации пользователь/устройство. Auth0, например say 'Токены обновления могут быть выпущены и отозваны для каждой комбинации приложения, пользователя и устройство.' - person DevFox; 05.03.2015
comment
@DevFox Должен сказать, мне очень нравится это решение. Наше приложение в настоящее время обращается к базе данных при каждом запросе на проверку правильности сеанса, и оно даже не находится в производстве, но меня это уже беспокоит. Спасибо, что опубликовали это. - person Lo-Tan; 10.06.2016
comment
Нужен ли нам для этого токен обновления? Я имею в виду, что мы можем просто установить время истечения на 5 минут, и в течение этих 5 минут мы не проверяем, изменились ли данные токена (имя пользователя, адрес электронной почты, пароль, хэш (снова хешируется для токена, чтобы предотвратить утечку)). Через 5 минут мы просто проверяем, соответствует ли passwordHashHash в токене хэшу passwordhash в базе данных (среди других данных, которые мы можем захотеть проверить), и либо генерируем новый токен с новым сроком действия, либо отвечаем 403 Unauthorized. - person MADforFUNandHappy; 18.11.2020

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

Я вижу, что для проверки или аннулирования токена для каждого запроса API необходимо нажать db, однако весь процесс мог бы быть проще, как я вижу здесь.

Всякий раз, когда создается jwt, то есть во время входа в систему или изменения/сброса пароля, вставляйте jwt с идентификатором пользователя в таблицу и сохраняйте jti (в основном номер uuid) для каждого jwt. Тот же jti входит и в полезную нагрузку jwt. Фактически jti однозначно идентифицирует jwt. У пользователя может быть несколько jwts одновременно, когда доступ к учетной записи осуществляется с нескольких устройств или браузеров, и в этом случае jti различает устройство или пользовательский агент.

Таким образом, схема таблицы будет такой: jti | Логин пользователя. (и первичный ключ, конечно)

Для каждого API проверьте, есть ли jti в таблице, что означает, что jwt является допустимым.

Когда пользователь меняет или сбрасывает пароль, удалите все jti этого идентификатора пользователя из базы данных. Создайте и вставьте в таблицу новый jwt с новым jti. Это приведет к аннулированию всех сеансов со всех других устройств и браузеров, кроме того, который изменил или сбросил пароль.

Когда пользователь выходит из системы, удалите этот конкретный jti этого пользователя, но не все. Будет единый вход, но не один выход. Поэтому, когда пользователь выходит из системы, он не должен выходить из системы со всех устройств. Однако удаление всех jtis также приведет к выходу из системы со всех устройств.

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

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

Примечание. Пожалуйста, объясните, если вы голосуете против.

person Amruta-Pani    schedule 06.12.2016
comment
Я не хочу постоянно проверять базу данных при использовании jwt. В вашем случае я должен. Я думаю, что гораздо дешевле проверить, недействителен ли токен, поскольку это не распространенный случай. И вы можете сделать токен даже недействительным с задержкой (например, 5 минут) вместо действия: он должен быть действительным как можно скорее. - person sigi; 19.12.2016
comment
@sigi Я не понял, как вы решаете, когда делать недействительными jwts пользователя со всех устройств. У меня была мысль перевыпустить jwt с 3 секундами, чтобы аннулировать его в момент его создания, но я не мог понять, как узнать, какой jwt аннулировать. - person Amruta-Pani; 20.12.2016
comment
Когда вы создаете JWT, вы сохраняете его в базе данных (это нормально, потому что это происходит только при входе в систему). JWT имеет срок годности, который проверяется каждый раз. В дополнение к этому вы проверяете, есть ли он в черном списке (это может быть таблица базы данных ИЛИ в Reddis). Когда пользователь меняет свой пароль, вы просматриваете все JWT от этого пользователя и проверяете все, которые еще действительны, и помещаете их в свой черный список. Преимущество: этот черный список намного меньше и его легко хранить в памяти. Также нормально, если черный список не синхронизирован / отстает на несколько минут. - person sigi; 20.12.2016
comment
Почувствуйте, что весь смысл JWT излишен, если вам нужно проверять базу данных для каждого вызова API. Можно также использовать сеансы. - person DollarAkshay; 16.02.2021

Если пользователь меняет свой пароль, вы попадете туда. Но не хотите лезть в бд для авторизации?

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

person Mark Essel    schedule 30.08.2016

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

person Sudhanshu Gaur    schedule 11.01.2016
comment
Круто, ценю твой ответ. У меня есть вопрос, извините, если я не прав. Скажем, если вы не сохраняете измененное время пароля в базе данных, тогда вход в систему будет происходить с токенами, созданными со старым паролем, также правильно. Например, вы вошли в систему с помощью мобильного телефона, теперь изменили свой пароль на компьютере, но сессия по-прежнему работает на мобильном телефоне в течение 3 дней. Я считаю, что в этом случае сеанс не должен работать в мобильном телефоне. Только из-за этого случая я добавил логику хранения измененного времени пароля в базе данных. - person Gopinath Shiva; 12.01.2016
comment
Хорошо, теперь я понял, где была проблема, на самом деле в моем случае происходило то, что я использовал jsonwebtoken для node.js, теперь в этом модуле предопределено, что когда вы входите в систему для токенов, срок действия которых истек (до 3 дней), он автоматически сообщает вам, что срок действия токена истек, поэтому теперь мне не нужно проверять мое поле change_pasword_field в db, чтобы они могли проверить, истек ли срок их действия или я не получил их ?? - person Sudhanshu Gaur; 12.01.2016
comment
Я получил ваш ответ, но вопрос, который я вам задал, отличается. Вы упомянули, что модуль позаботится о токенах с истекшим сроком действия. Я согласен, что он должен. Но вот сценарий, скажем, я вошел в приложение 13 января, используя свой пароль в MOBILE (старый пароль). Теперь я изменил пароль приложения 14 января на ПК. Так что к настоящему времени все предыдущие токены, сгенерированные с использованием моего старого пароля, не должны работать. - person Gopinath Shiva; 13.01.2016
comment
Теперь, если бы я не сохранил, изменил время пароля в моей базе данных, я не смог бы выйти из системы с токенами, сгенерированными со старым паролем. Допустим, в приведенном выше примере токен, сгенерированный 13 января, будет работать в течение следующих 3 дней (т. е. до 16 января, если срок действия токена установлен на 3 дня). Ты понял меня сейчас? - person Gopinath Shiva; 13.01.2016
comment
на самом деле я просто что-то неправильно подумал, да, вы абсолютно правы, я должен хранить поле change_password и не должен устанавливать для него время истечения срока действия, на самом деле, не могли бы вы сказать мне одну вещь, вы используете и мобильное приложение, или только веб-сайт ?? также, если вы используете мобильный телефон, то какое время истечения срока действия вы устанавливаете ?? - person Sudhanshu Gaur; 13.01.2016
comment
потому что проблема, с которой я сталкиваюсь, заключается в том, что мобильные приложения никогда больше не запрашивают вход в систему, они не устанавливают время истечения срока действия, как вы решаете эту проблему, потому что, если нет срока действия, я должен хранить все свои токены выхода в моей базе данных, что я думаю в будущее потребует большого размера базы данных, и я не могу справиться с этим объемом данных в Redis ?? - person Sudhanshu Gaur; 13.01.2016
comment
ты здесь человек, жду твоего ответа ?? - person Sudhanshu Gaur; 17.01.2016
comment
Привет, приятель, я считаю, что моя логика работает в обоих случаях (веб-приложение и мобильное приложение), на самом деле, согласно моей логике, при каждом HTTP-запросе вы должны проверять срок действия токена, а также менять логику пароля. Если вы это сделаете, то я полагаю, что вы не столкнетесь с проблемой токена. Ты меня понимаешь? - person Gopinath Shiva; 18.01.2016
comment
да, но мобильные приложения никогда больше не запрашивают повторный ввод учетных данных пользователя (дело в том, что для них это время истечения срока действия бесконечно), так что как вы с этим справляетесь, скажите мне ?? - person Sudhanshu Gaur; 18.01.2016
comment
вы можете установить время истечения срока действия, что вы хотите. Но как только пароль изменен, вы должны выйти из них на всех других устройствах. Это можно было сделать, только проверив время смены пароля и время создания токена. Поэтому при каждом http-запросе из вашего мобильного приложения проверяйте время последнего изменения пароля и время создания токена. Я считаю, что это сработает, и я не уверен, что это эффективный способ сделать это. - person Gopinath Shiva; 19.01.2016
comment
на самом деле вы не понимаете, я хочу спросить, как и в мобильных приложениях, я должен установить время истечения срока действия на время жизни, поэтому теперь мне нужно хранить все токены выхода в моей базе данных на всю жизнь. Хорошо, теперь, из-за чего я подумал, что должен хранить все входы в систему токены в моей базе данных, и когда придет запрос, я проверю, находится ли этот токен внутри этого пользовательского столбца в моей базе данных (на самом деле моя точка зрения заключалась в том, чтобы вместо сохранения всех токенов выхода из системы на всю жизнь (потому что они станут огромными по количеству), почему бы не хранить только в настоящее время токены входа пользователя, и как только он выйдет из системы, удалите его из моей базы данных) - person Sudhanshu Gaur; 22.01.2016
comment
пожалуйста, скажите мне, если я думаю неправильно, или вы думаете, что я могу сделать что-то лучше, это будет действительно заметно, потому что у меня есть собственный стартап, и я сейчас внедряю этот токен, так что это будет действительно важная помощь для меня. БЛАГОДАРЮ ВАС :) - person Sudhanshu Gaur; 22.01.2016
comment
почему бы не хранить только текущие токены входа пользователя, и как только он выйдет из системы, удалите их из моей базы данных => Пожалуйста, поймите, что это не сработает, если он изменит пароль. Представьте, что ваш аккаунт взломан, когда вы используете приложение в net center. Теперь вы меняете пароль приложения на своем компьютере. Согласно вашему решению, хакер все еще может использовать ваше приложение, поскольку время жизни токена установлено на время жизни. Поэтому я считаю, что это никогда не будет идеальным решением для многих приложений. Соглашаться? - person Gopinath Shiva; 22.01.2016
comment
я должен хранить все токены выхода в своей базе данных на всю жизнь. Хорошо ... На самом деле моя точка зрения заключалась в том, чтобы вместо сохранения всех токенов выхода из системы на всю жизнь (потому что их число станет огромным => Сохраните токен выхода в базе данных и удалите его из базы данных после истечения срока действия токена. Я полагаю, что один и тот же случай может существовать для другой базы данных. - person Gopinath Shiva; 22.01.2016
comment
Мои наилучшие пожелания для вашего стартапа :) - person Gopinath Shiva; 22.01.2016
comment
одна вещь, которую вы упускаете, когда пользователь меняет свой пароль, что я сделаю, так это я удалю все токены входа, кроме того, который изменил пароль, связанный с этим пользователем, из моей базы данных, поэтому ваш первый запрос решен, я думаю, теперь для второго запроса да, вы удаляют их, когда срок их действия истекает, но поскольку срок действия истекает на всю жизнь, поэтому они не будут удалены, чувак, не думаешь ли ты еще раз, что их будет огромное количество, пожалуйста, скажи мне, если я что-то упустил ?? - person Sudhanshu Gaur; 22.01.2016
comment
Да, согласен с вашим ответом, мой ответ был неправильным с токенами, срок действия которых истекает. Я считаю, что ваш подход к делу хорош. Я считаю, что в вашем случае нет токена обновления. Так что вы можете пойти со своим подходом :) Я считаю, что ваш подход действителен в течение всего срока службы :) - person Gopinath Shiva; 23.01.2016
comment
большое спасибо за то, что выручил меня от этого человека :) - person Sudhanshu Gaur; 24.01.2016
comment
Привет, Судханшу, я добавил твой комментарий в качестве ответа в свое обновление. Пожалуйста, проверьте и отредактируйте, если необходимо :) - person Gopinath Shiva; 01.02.2016
comment
Нет необходимости редактировать, также спасибо за добавление, надеюсь, это будет полезно для кого-то в отношении этой проблемы :) - person Sudhanshu Gaur; 01.02.2016
comment
прохладно . Конечно, кому-то это поможет :) - person Gopinath Shiva; 01.02.2016