Если я правильно понял вопрос, вы хотите знать, как защитить ваше веб-приложение от CSRF-атаки.
Ваши API-интерфейсы размещены на бэкэнд-веб-сервере, тогда как статическое содержимое Angular размещено в nginx.
Идея объяснена в Angular docs .Вам нужно установить cookie XSRF-TOKEN
(имя по умолчанию) в ответе REST аутентификации.Файл cookie должен быть secure
, но читаемым с использованием javascript (не httpOnly
).Вы можете установить значение cookie на что-то уникальное для пользовательской сессии (в идеале криптографически генерируемое случайное число).Здесь и далее в каждом последующем запросе Angular HttpClient
будет отправлять значение cookie в заголовке запроса X-XSRF-TOKEN
, и сервер должен проверить правильность значения cookie и значения заголовка запроса.Обратите внимание, что cookie маркера доступа также будет сопровождать запрос (как обычно при аутентификации на основе токенов).Таким образом, при каждом действительном вызове API ваш веб-сервер будет получать токен доступа в заголовке cookie и значение cookie XSRF в настраиваемом заголовке XSRF и заголовке cookie XSRF.Если заголовок XSRF отсутствует или значения не совпадают, сервер отклоняет запрос.
Итак, решение не имеет состояния и управляется путем сохранения значений в cookie, которые сопровождают каждый запрос (если только вы не поддерживаете cookie XSRFзначение на сервере для более строгой проверки).
В вашей настройке файл cookie, установленный сервером, не будет виден статическим файлам Angular, обслуживаемым nginx, из-за политики одного источника.Однако вы можете решить эту проблему одним из следующих способов:
Если к вашему веб-API-серверу и статическому файловому серверу обращаются по разным IP-адресам (например, 172.168.1.1 и 172.168.2.2) илиразные домены (скажем, webapi.com или static.com), вам нужно настроить сервер web api, чтобы в ответе были установлены следующие заголовки, чтобы позволить статическому файловому серверу (172.168.2.2 или static.com) читать куки: Access-Control-Allow-Origin: https://static.com
Если доступ к вашему веб-API-серверу и статическому файловому серверу осуществляется с использованием разных поддоменов (webapi.example.com & static.example.com), вы можете использовать любой из указанных выше подходов.или задайте домен при настройке cookie: Set-Cookie: name=value; domain=example.com
Вы также можете прочитать эту тему для CSRF