Ответ
Хранение JWT в cookie с флагами HttpOnly и Secure является рекомендуемой практикой для защиты веб-приложений от XSS-атак.
Ключевые преимущества:
-
Защита от XSS (Cross-Site Scripting): Флаг
HttpOnlyзапрещает доступ к cookie из JavaScript. Это означает, что даже если злоумышленник сможет внедрить вредоносный скрипт на вашу страницу, он не сможет украсть JWT пользователя. -
Автоматическая отправка: Браузер автоматически прикрепляет cookie к каждому запросу на тот же домен, избавляя от необходимости вручную добавлять заголовок
Authorization. -
Защита от CSRF (Cross-Site Request Forgery): Атрибут
SameSite(со значениямиStrictилиLax) не позволяет браузеру отправлять cookie с межсайтовыми запросами, что является основной мерой защиты от CSRF.
Пример установки cookie в Python (Flask):
from flask import Flask, make_response, jsonify
app = Flask(__name__)
@app.route('/login')
def login():
# После успешной аутентификации генерируется JWT
jwt_token = 'your.generated.jwt.token'
response = make_response(jsonify({'status': 'success'}))
response.set_cookie(
'access_token',
value=jwt_token,
httponly=True, # Запретить доступ из JS
secure=True, # Отправлять только по HTTPS
samesite='Lax' # Защита от CSRF
)
return response
Недостатки:
- Ограничение размера: Cookie ограничены размером примерно в 4 КБ.
- Не подходит для не-браузерных клиентов: Мобильные или десктопные приложения не используют cookie, для них предпочтительнее передача токена в заголовке
Authorization.