Невозможно проверить токен Antiforgery, когда cook ie имеет значение httponly - PullRequest
0 голосов
/ 09 января 2020

Когда я устанавливаю значение httponly = true. AutoValidateAntiforgeryTokenAttribute не проверяет запрос и не возвращает 400 неверных запросов

AntiforgeryTokenSet tokens = antiforgery.GetAndStoreTokens(context);
   context.Response.Cookies.Append("XSRF-TOKEN", tokens.RequestToken,
    new CookieOptions() { HttpOnly = true});

После выполнения этого повара ie становятся безопасными, как показано ниже

set-cookie: XSRF-TOKEN={{Cookie Value}}; path=/; samesite=lax; httponly

Но AutoValidateAntiforgeryTokenAttribute возвращает 400 плохой запрос

when changed the Value HttpOnly = true to HttpOnly = false

Отлично работает. Есть ли способ установить antiforgerytoken cook ie на httponly в asp core и angular 7. Если это не сработает, может какой-нибудь орган, пожалуйста, объясните мне причину этого.

1 Ответ

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

Нет, для этого конкретного повара ie невозможно установить только http. Чтобы понять, почему , взгляните на следующий раздел из ASP. NET Core docs :

AngularJS использует соглашение для адресации CSRF. Если сервер отправляет cook ie с именем XSRF-TOKEN, служба AngularJS $http добавляет значение cook ie в заголовок при отправке запроса на сервер.

Это говорит о AngularJS и $http, но тот же механизм используется для Angular и его HttpClient службы (см. Angular документы ).

Чтобы иметь возможность добавить значение повара ie к заголовку, Angular должно иметь возможность прочитать значение из значения повара ie. Когда вы устанавливаете для повара ie значение HttpOnly, Angular не может прочитать значение из повара ie (как будто его даже не существует). Таким образом, значение не отправляется, и сервер отклоняет запрос.

...