Как заставить токен истечь через некоторое время? (без JWT) - PullRequest
0 голосов
/ 15 октября 2019

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

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

Поэтому мой вопрос: как вы удаляете токен или что-то в этом роде по истечении срока действия?

После того, как пользователь вошел в систему, я сохраняю время входа в систему в таком формате:

login_time[datetime.datetime.now()] = data['username']

, а затем я подумал сделать что-то подобное до или в чате:

for time, user in login_time.items():
    if datetime.datetime.now() >= time + datetime.timedelta(seconds=30):
        del login_time[time]

Но я не знаю, где его поставить и как он будет работать.

это часть маршрута чата:

@app.route('/chat', methods=['POST'])
def chat():
    try:
        data = request.get_json()
        username = verify_token(data['token']) # Verifying if token is in tokens list
        validate_message(data['message']) # Verifying if message is not empty
        chats.append(username + ": " + data['message'])
        for i, u in login_time.items(): # Not sure about this part
            if i != u:
                abort(400, 'Your token is expired, please login again')
        return jsonify(chats)

Ответы [ 2 ]

0 голосов
/ 15 октября 2019

при использовании аутентификации на основе токена, вам нужно будет идентифицировать и проверить доступ по этому токену, то есть идентифицировать клиента (какой это пользователь) и проверить, проверяется ли срок действия токена, например, срок действия

, который вы можетевключить эти данные в сам токен (JWT)

let's say the token is smth like 'token-1571153241', where the number is unix timestamp of expiration
1) parse the expiration timestamp from the token
2) if expiration reached return expiry message, else serve the request
* keep in mind to issue the token with the expiry date

или

использовать любую базу данных для хранения информации токена

1) parse the token from the request
2) check the db for the token validity
3) pass or reject based the criteria 

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

0 голосов
/ 15 октября 2019

Одним из простых решений, если вы не хотите использовать JWT, является:

  • Когда вы генерируете свой токен, одновременно генерируйте дату истечения срока действия
  • Журналоба в базе данных
  • Когда пользователь пытается опубликовать сообщение, его токен отправляется с сообщением
  • , чтобы проверить, действителен ли токен (либо вы проверите, если datetime.now ()>token_expiration_time или вы даже можете сделать так, чтобы скрипт удалял каждый просроченный токен из базы данных каждые x минут, а затем просто проверял, найден ли токен в базе данных или нет)
  • Если токен истек, вы перенаправляете пользователя и спрашиваетеему снова войти в систему, чтобы сгенерировать еще один токен.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...