Каковы преимущества хранения JWT в HTTP-only cookie?

Ответ

Хранение JWT в cookie с флагами HttpOnly и Secure является рекомендуемой практикой для защиты веб-приложений от XSS-атак.

Ключевые преимущества:

  1. Защита от XSS (Cross-Site Scripting): Флаг HttpOnly запрещает доступ к cookie из JavaScript. Это означает, что даже если злоумышленник сможет внедрить вредоносный скрипт на вашу страницу, он не сможет украсть JWT пользователя.

  2. Автоматическая отправка: Браузер автоматически прикрепляет cookie к каждому запросу на тот же домен, избавляя от необходимости вручную добавлять заголовок Authorization.

  3. Защита от 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.