совместное использование файлов cookie между доменами

Nginx

описание проблемы

Нужно решить фронтенд пк и сервер (джава), и такой же куки можно получить после кроссдомена.
Существует ограничение на использование доменных имен второго уровня для совместного использования файлов cookie, то есть доменные имена второго уровня двух доменных имен должны быть одинаковыми.

Имя домена для доступа к внешнему ПК: a.b.com
Доменное имя внутреннего интерфейса: a-gateway.b.com
Эти два доменных имени принадлежат одному и тому же доменному имени второго уровня: b.com.

междоменный доступ

В сервер nginx добавлена ​​следующая конфигурация для решения проблемы междоменного доступа. Междоменный доступ также может быть решен кодом в программе.

  • конфигурационный файл nginx
location / {
    #是否允许跨域发送Cookie
    add_header Access-Control-Allow-Credentials true;
    add_header Access-Control-Allow-Origin 'http://a.b.com';
    add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
    add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';

    if ($request_method = 'OPTIONS') {
        return 204;
    }
}

Перенос и отправка файлов cookie между доменами

Если вам нужно разрешить отправку файлов cookie между доменами, nignx необходимо настроить следующие параметры.

  • конфигурация nginx
  1. «Access-Control-Allow-Credentials»: необязательное поле. Его значение является логическим значением, указывающим, разрешать ли отправку файлов cookie. По умолчанию файлы cookie не включаются в запросы CORS. Если установлено значение true, это означает, что сервер явно разрешает включить файл cookie в запрос и отправить его на сервер вместе. Это значение может быть установлено только в true.Если сервер не хочет, чтобы браузер отправлял файлы cookie, просто удалите это поле.
  2. Для запросов с учетными данными сервер НЕ ДОЛЖЕН устанавливать для Access-Control-Allow-Origin значение «*». Это связано с тем, что информация о файлах cookie передается в заголовке запроса.Если значение Access-Control-Allow-Origin равно «*», запрос завершится ошибкой. при установке значения Access-Control-Allow-Origin вa.b.com, запрос будет выполнен успешно. То есть, когда для Access-Control-Allow-Credentials установлено значение true Access-Control-Allow-Origin не может быть установлен в *.
  • Интерфейсная конфигурация
    Возьмите запрос vue в качестве примера:
import axios from 'axios';
axios.defaults.withCredentials=true //允许携带cookie
  • Java устанавливает cookie
public static void  addCookie(HttpServletResponse response,String cookieName,String cookieValue,int maxAge){
    Cookie cookie  =new Cookie(cookieName,cookieValue);
    cookie.setDomain("b.com");//指定域名
    cookie.setPath("/");//设置cookie的生命周期
    cookie.setHttpOnly(false);
    if(maxAge>0){
        cookie.setMaxAge(maxAge);
    }
    response.addCookie(cookie);
}