Angular 8 ngx-cook ie 2.4 не умеет читать с FireFox (хотя и присутствует), но работает на Chrome / Edge - PullRequest
2 голосов
/ 09 апреля 2020

Среда

  • WebAPI (. NET Core v3)
  • Angular (v8)
  • Ngx-Cook ie (v2.4)
  • VS 2019 Интегрированный шаблон проекта (Angular + WebAPI вместе)

Постановка задачи

In наше приложение WebAPI вызывает приложение angular и устанавливает повара ie с токенами аутентификации в запросе. Для соответствия текущей безопасности, SameSite=strict, Secured=True устанавливается вместе с тайм-аутом 15 минут. Приложение angular считывает событие cook ie in ng-init, используя экземпляр ngx-cookie-service. Служба cook ie не может прочитать повар ie в FireFox (v74.ab c), но отлично работает в Chrome (v80.ab c) и Edge (v 18363) ). Мы попытались установить отладчик перед чтением повара ie и проверили присутствие повара ie в разделе «Хранение», и все было в порядке. Даже вручную, когда мы выполняем сервис cook ie, он не может найти.

Однако, когда мы снова возвращаемся на этот маршрут, сервис cook ie может прочитать повар ie успешно и правильно выполнять дальнейшую работу. Мы думали, что это может быть связано с разницей во времени выполнения, что операция чтения выполняется раньше, чем запись, поэтому поместил setTimeout, но он все еще не работает.

Код

WebAPI

CookieOptions cookieOptions = new CookieOptions()
{
   Secure = true,
   Expires = DateTime.Now.AddMinutes(tokenExpirationTimeout),
   IsEssential = true,
   SameSite = SameSiteMode.Strict
};

Angular

ngOnInit() {    
setTimeout( () => {
  var authToken = this.cookieService.get("AuthToken");
  if (!authToken || authToken.length == 0) {
    console.error("Authentication token not received");
    this.router.navigate(["auth-failed"]);
  }
  this.StoreService.setUserName(
    this.cookieService.get("userName")
  );
  this.router.navigate(["archive"]);
},
  5000);
}

Примечание: для angular вызов setTimeout добавляется к задержке проверки читай и пиши разницу, но не помогает. У нас всегда есть пустой cook ie

Если мы вручную перенаправим на этот маршрут снова, готовый ie будет легко прочитан.

И angular, и webapi развернуты в одном приложении внутри Azure Служба приложений, поэтому никаких проблем, связанных с проблемами CSRF / SameSite, а также HTTPS, не предпринимается.

Снимок экрана FireFox enter image description here

( Обновление: отключено Улучшенная защита , а также явно разрешено готовить ie хранилище) enter image description here

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