Что такое Refresh Token
Python
Middle
Без компании
Что такое Refresh Token
Ответы
Refresh Token — это долгоживущий токен, используемый для получения нового Access Token без повторной аутентификации пользователя. Он повышает безопасность, так как Access Token имеет короткий срок жизни, а Refresh Token позволяет его обновлять.
**Пример работы:**
- Пользователь логинится, получает Access Token (живёт 15 минут) и Refresh Token (живёт 7 дней).
- Когда Access Token истекает, клиент отправляет Refresh Token на `/refresh` эндпоинт.
- Сервер проверяет Refresh Token и выдаёт новый Access Token.
**Пример кода (Flask):**
```
from flask import Flask, jsonify, request
import jwt
import datetime
app = Flask(__name__)
SECRET_KEY = "your-secret-key"
# Генерация токенов
def generate_tokens(user_id):
access_token = jwt.encode(
{"user_id": user_id, "exp": datetime.datetime.utcnow() + datetime.timedelta(minutes=15)},
SECRET_KEY,
)
refresh_token = jwt.encode(
{"user_id": user_id, "exp": datetime.datetime.utcnow() + datetime.timedelta(days=7)},
SECRET_KEY,
)
return {"access_token": access_token, "refresh_token": refresh_token}
# Обновление Access Token
@app.route('/refresh', methods=['POST'])
def refresh():
refresh_token = request.json.get('refresh_token')
try:
data = jwt.decode(refresh_token, SECRET_KEY, algorithms=["HS256"])
new_access_token = jwt.encode(
{"user_id": data["user_id"], "exp": datetime.datetime.utcnow() + datetime.timedelta(minutes=15)},
SECRET_KEY,
)
return jsonify({"access_token": new_access_token})
except jwt.ExpiredSignatureError:
return jsonify({"error": "Refresh Token expired"}), 401
```
**Важно:** Refresh Token должен храниться безопасно (HTTP-only cookie) и отзываться при logout.