Как принудительно истечь токен после его использования (до истечения времени истечения, установленного для токена с использованием его опасной библиотеки в python) - PullRequest
0 голосов
/ 16 мая 2019

Мой пример использования - создание токена для сброса пароля API. Что я делаю с его опасной библиотекой на python. https://pythonhosted.org/itsdangerous/.

Этот токен (в ссылке сброса пароля) пересылается по электронной почте клиенту, токен имеет ограничение по времени истечения, которое подтверждается, и после этого сброс пароля может пройти успешно.

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

Есть ли лучший способ принудительно истечь токен? Если нет, то как лучше всего сохранить токен, в котором он использовался?

import itsdangerous

key = "test"

# signer = itsdangerous.URLSafeTimedSerializer(key)
signer = itsdangerous.TimedJSONWebSignatureSerializer(key, expires_in=5)
email = "email@test.com"

# token = email  # to be used with URLSafeTimedSerializer
token = signer.dumps({"email": email})

print token

# print signer.loads(token, max_age=5) # to be used with URLSafeTimedSerializer
print str(signer.loads(token)["email"]) # to be used with TimedJSONWebSignatureSerializer

1 Ответ

0 голосов
/ 16 мая 2019

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

Однако вы могли бы создать уникальный ключ ("some_key"), как только вы сгенерируете свой токен и сохраните ключ в своей базе данных. В итоге полезная нагрузка токенов, которая будет выдана пользователю, может выглядеть следующим образом: {"email": email, "reset_key": "some_key"}.

Каждый раз, когда кто-то пытается сбросить свой пароль, вы просто сначала проверяете этот ключ, чтобы разрешить или отклонить запрос.

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

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...