Angular 6 & .Net Core 2 - токен XSRF сгенерирован, но пуст при отправке обратно в API - PullRequest
0 голосов
/ 13 мая 2019

У меня есть .net core 2. * API с приложением Angular 6. *, которое я пытаюсь защитить от атак XSRF.

При входе в систему мы получаем токен авторизации, а затем делаем еще один вызов для получения токена XSRF.

На стороне клиента у нас есть перехватчик HTTP, который добавляет токен в заголовок любых последующих запросов к API.

Код API выглядит корректно, и я вижу, что заголовок ответа содержит маркер XSRF, однако, когда последующий запрос к API Request.Headers ["X-XSRF-TOKEN"] существует, но он существует пуст.

Может кто-нибудь посоветовать мне, где я мог ошибиться?

Я следовал этому примеру: https://www.blinkingcaret.com/2018/11/29/asp-net-core-web-api-antiforgery/

Контроллер API

    [ApiController]
    public class AntiForgeryController : Controller
    {
        private IAntiforgery _antiForgery;
        public AntiForgeryController(IAntiforgery antiForgery)
        {
            _antiForgery = antiForgery;
        }

        [Route("api/antiforgery")]
        [IgnoreAntiforgeryToken]
        public IActionResult GenerateAntiForgeryTokens()
        {
            var tokens = _antiForgery.GetAndStoreTokens(HttpContext);
            Response.Cookies.Append("XSRF-REQUEST-TOKEN", tokens.RequestToken, new Microsoft.AspNetCore.Http.CookieOptions
            {
                HttpOnly = false
            });
            return NoContent();
        }
    }

Метод обслуживания пользовательского интерфейса.


      getAntiForgeryToken(): any {
        return this.http.get(`${this.baseURL}/antiforgery`).pipe(map(x => {
          return true;
        }));
      }

Интерфейс http UI.


    export class AddCsrfHeaderInterceptorService implements HttpInterceptor {
        intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
            let requestToken = this.getCookieValue('XSRF-REQUEST-TOKEN');
            return next.handle(req.clone({
                headers: req.headers.set('X-XSRF-TOKEN', requestToken)
            }));
        }

        private getCookieValue(cookieName: string) {
            const allCookies = decodeURIComponent(document.cookie).split('; ');
            for (let i = 0; i < allCookies.length; i++) {
                const cookie = allCookies[i];
                if (cookie.startsWith(cookieName + '=')) {
                    return cookie.substring(cookieName.length + 1);
                }
            }
            return '';
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...