Angular HttpClient не отправляет cookie домена - PullRequest
0 голосов
/ 06 января 2020

У меня есть приложение Angular, которое работает на angular.example.com. API работает на app.example.com. Я получаю домен cook ie из app.example.com, который устанавливает cook ie на .example.com, содержащий токен JWT (cook ie должен быть разделен между этими доменами в соответствии с RF C: https://tools.ietf.org/html/rfc6265#section -4.1.2.3 ).

Когда отправляется запрос к angular.example.com, и я вижу повара ie как часть заголовков запроса (добавленных браузером). Приложение Angular обслуживается и отправляет запрос на app.example.com для получения некоторых данных.

Я ожидаю, что повар ie будет отправлен вместе с этим запросом браузером, но этого не произойдет. Кто-нибудь может объяснить, почему этого не происходит?

Ответы [ 2 ]

2 голосов
/ 06 января 2020

XHR-запросы в Angular по умолчанию не передают информацию cook ie с каждым запросом. Это означает, что по умолчанию Angular не передает файлы cookie, полученные по предыдущим запросам, обратно на сервер, который эффективно отключает пользователя от системы.

И в ответе вашего сервера должны быть разрешены заголовки Access-Control-Allow -Credentials .

Чтобы это работало, HttpClient должен установить withCredentials:

CORS - Allow-Origin-With-Credentials

В дополнение к заголовку withCredentials на стороне клиента, если вы пересекаете домен, также убедитесь, что установлен заголовок Allow-Origin-With-Credentials на сервере. Если этот заголовок не установлен, то клиентская сторона withCredentials также не влияет на междоменные вызовы, в результате чего файлы cookie и заголовки аутентификации не отправляются.

let options = new RequestOptions({ headers: headers, withCredentials: true });
this.http.post(this.url, body , options);
1 голос
/ 06 января 2020

Http не пересылает куки по умолчанию. Вы должны включить его либо для каждого запроса с помощью config {withCredentials: true}, либо создать HttpInterceptor, чтобы добавить его для всех запросов.

this.httpclient.get (myUrl, {withCredentials: true }) ...

Или:

Stackoverflow: добавьте учетные данные для каждого вызова httpClient

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...