Как использовать токены обновления jwt

Я работаю с python flask_jwt_extended для обработки jwt. У меня есть конечная точка обновления (из документов) следующим образом:

# The jwt_refresh_token_required decorator insures a valid refresh
# token is present in the request before calling this endpoint. We
# can use the get_jwt_identity() function to get the identity of
# the refresh token, and use the create_access_token() function again
# to make a new access token for this identity.
@app.route('/refresh', methods=['POST'])
@jwt_refresh_token_required
def refresh():
    current_user = get_jwt_identity()
    ret = {
        'access_token': create_access_token(identity=current_user)
    }
    return jsonify(ret), 200

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

{
  "msg": "Token has expired"
}

Откуда я должен знать, что нужно обновить токен до истечения срока его действия во внешнем интерфейсе и как это сделать?


person msche    schedule 10.05.2020    source источник


Ответы (1)


Итак, что вы обычно делаете, это иметь 2 конечные точки, одна из которых выдает токен

И обновление, которое выдает токен обновления

Таким образом, при первом вызове вашего JS-кода вы получите токен. Маркер обычно включает дату и время или срок действия (скажем, в секундах)

Затем в вашем JS вы должны проверить, сколько времени осталось у вашего токена, и если его не так много, вы должны вызвать свой маршрут refrehtoken, чтобы получить новый токен.

person sacha barber    schedule 10.05.2020
comment
Исходя из вашего объяснения, для каждой HTML-страницы у меня может быть файл js, который будет обрабатывать токены обновления. Разве вся информация о токене не хранится в файле cookie HTTPOnly, и если да, то как мне получить к нему доступ? - person msche; 10.05.2020
comment
Нет, обычно у вас есть общая служба токенов в JS, которая будет сломана и сохранена в локальном хранилище и будет отвечать за обработку создания заголовка токена Berarer для каждого запроса. - person sacha barber; 10.05.2020