Среда
- 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
( Обновление: отключено Улучшенная защита , а также явно разрешено готовить ie хранилище)