Я использую Flask-JWT-Extended и дважды отправляю метод cookie оттуда для моего бэкэнда Flask и React Frontend. Таким образом, когда пользователь входит в систему с внешнего интерфейса, серверная часть устанавливает всего 4 разных файла cookie: csrf_access_token
, csrf_refresh_token
, access_token_cookie
, refresh_token_cookie
. Из этих 4 файлов cookie access_token_cookie
и refresh_token_cookie
должны быть HTTPonly
файлами cookie и, следовательно, недоступны для JS, а csrf_access_token
и csrf_refresh_token
являются non-HTTPonly
файлами cookie. Таким образом, идея здесь заключается в том, что файл cookie HTTPOnly
содержит информацию о сеансе пользователя с токеном CSRF, а файл cookie non-HTTPonly
содержит токен CSRF, и когда выполняется запрос POST, токен CSRF, к которому обращается JS, отправляется на серверную часть вместе с другими файлами cookie.
Это отлично работало в моей среде разработки, два файла cookie были доступны для JavaScript, и поэтому я мог отправить csrf_acccess_token
вместе с запросом с withCredentials
True, но когда я развертываю это в тестовой среде с TLS, используя Nginx (как бэкэнд, так и интерфейс) , он устанавливает все 4 файла cookie как HTTPOnly
cookie, и поэтому я не могу сделать запрос POST.
Я не уверен, было ли это вызвано Nginx
, но из того, что я могу сказать, я не вижу много возможностей отключить 2 из HTTPOnly
файлов cookie, регистрируемых в бэкэнде.
Ниже моя конфигурация для flask-jwt-extended
CORS_HEADERS = "Content-Type,X-CSRF-TOKEN"
JWT_TOKEN_LOCATION = ["cookies"]
JWT_COOKIE_SECURE = True
#JWT_COOKIE_SAMESITE = None
JWT_ACCESS_TOKEN_EXPIRES = 600
JWT_REFRESH_TOKEN_EXPIRES = 1200
JWT_CSRF_IN_COOKIES = True
JWT_COOKIE_DOMAIN = ".mydomain.com"
#JWT_ACCESS_COOKIE_PATH = '/'
#JWT_REFRESH_COOKIE_PATH = '/'
JWT_COOKIE_CSRF_PROTECT = True
JWT_SECRET_KEY = "secret"
Любой совет будет принят с благодарностью!