Angular2 Set-Cookie JSESSIONID в HTTP-запросах

Я использую библиотеку auth0/angular2-jwt для добавления JWT к каждому запросу.

Я хотел бы знать, как я могу также добавить файл cookie JSESSIONID для каждого запроса, чтобы я попал в сеанс на стороне сервера?

Это хорошая практика?

Я пробовал это без успеха

let myHeader = new Headers();
myHeader.append('SET-COOKIE', 'JSESSIONID=<jsessionid>');

this.authHttp.get(endpoint, {headers: myHeader, withCredentials: true}).map(res => res.json()).subscribe(
  jwt => {
    ...
  },err => console.log(err));

person faguilera85    schedule 15.11.2016    source источник


Ответы (1)


Хорошая практика?

Нет, это нехорошая практика.

Из документов JWT:

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

Ссылка: https://jwt.io/introduction/https://jwt.io/introduction/

JSESSIONID

Вы должны знать, что в браузере хранится несколько типов файлов cookie. Многие из них могут быть доступны из кода JS, но некоторые из них httpOnly. Это означает, что браузер может добавлять их к каждому запросу прозрачно в код JS (вы не увидите файл cookie в своем коде). Реализация JSESSIONID по умолчанию на стороне сервера является примером файлов cookie httpOnly. Существует несколько причин безопасности для такого дизайна — вредоносное ПО JS на вашей странице не сможет украсть сеанс у клиента.

Заголовки

myHeader.append('SET-COOKIE', 'JSESSIONID=<jsessionid>');

Это недопустимый способ передачи файлов cookie на сервер. Это правильный способ отправить ответ клиенту и установить файлы cookie на клиенте. Если вы хотите передать файлы cookie, вы можете использовать:

myHeader.append('Cookies', 'JSESSIONID=<jsessionid>');

Тем не менее, это не сработает. Браузер все равно добавит свой собственный. При этом JSESSIONID должен автоматически добавляться браузером к вашим запросам. Если это не работает таким образом, файл cookie JSESSIONID не установлен в браузере (проверьте инструменты разработчика Chrome, вы можете просмотреть файлы cookie на вкладке приложения) или вы используете удаленный сервер - на другом порту/сервере/протоколе, чем ваше приложение (тогда в этом случае приходит CORS и разрушает ваше приложение).

person rzelek    schedule 15.11.2016