Токен CSRF не работает в производственной среде
Мое окружение: Бэкэнд Django развернут на Elastic Beanstalk за балансировщиком нагрузки приложений, который завершает ssl.
Поток таков: мой сайт обслуживается на S3 и cloudfront на домене: https://www.test.app.mydomain.com/. Это отправляет запрос на бэкэнд, который имеет домен: https://api.test.mydomain.com/. Запрос получает csrftoken в cookies браузера и включает его в заголовки.
Токены CSRF работают локально, но не работают в моей производственной среде. Самое главное, что в производственной среде нет csrftoken в cookies браузера.
Вот мои настройки, которые имеют отношение к делу:
MIDDLEWARE = [
# keep on top
'corsheaders.middleware.CorsMiddleware',
# rest of the middleware
"django.middleware.security.SecurityMiddleware",
"django.contrib.sessions.middleware.SessionMiddleware",
"django.middleware.common.CommonMiddleware",
"django.middleware.csrf.CsrfViewMiddleware",
"django.contrib.auth.middleware.AuthenticationMiddleware",
"django.contrib.messages.middleware.MessageMiddleware",
"django.middleware.clickjacking.XFrameOptionsMiddleware",
]
SESSION_ENGINE = "django.contrib.sessions.backends.signed_cookies"
SESSION_COOKIE_AGE = 7200 # 2 hours
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True
CSRF_TRUSTED_ORIGINS = ['http://localhost:3000', 'https://www.test.app.mydomain.com', 'https://test.app.mydomain.com']
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
USE_X_FORWARDED_HOST = True
CORS_ALLOWED_ORIGINS = ['http://localhost:3000', 'https://www.test.app.mydomain.com', 'https://test.app.mydomain.com']
CORS_ALLOW_CREDENTIALS = True
CORS_ALLOW_HEADERS = list(default_headers) + [
'Tab-ID',
]