ASP.NET core SPA SSR: использовать AntiForgery - PullRequest
2 голосов
/ 16 октября 2019

У меня есть приложение, написанное на ASP.net (v2.2) и Angular8. Сторона C # (на стороне сервера) - это просто веб-API, который предоставляет функциональность приложению Angular (на стороне клиента).

Мое клиентское приложение использует SSR (рендеринг на стороне сервера) для представления приложения пользователям.

Я хочу активировать механизм защиты от подделки на ASP.net. по моему заявлению. Как это должно работать, чтобы к любому HTTP-запросу я прикреплял cookie-файл против подделки и проверял его на своих контроллерах web-api (на стороне сервера \ c #).

Я попытался написать промежуточное программное обеспечение, которое будет прикреплятьсяпеченье к ответу. Это выглядит так (основано на this ):

public class AntiForgeryTokenMiddleware
{
    private readonly RequestDelegate _next;
    private readonly IAntiforgery _antiforgery;

    public AntiForgeryTokenMiddleware(RequestDelegate next, IAntiforgery antiforgery)
    {
        _next = next;
        _antiforgery = antiforgery;
    }

    public Task Invoke(HttpContext context)
    {
        if (context.Request.Path.Value.IndexOf("/your api endpoint, e.g. /api", StringComparison.OrdinalIgnoreCase) != -1)
        {
            var tokens = _antiforgery.GetAndStoreTokens(context);
            context.Response.Cookies.Append("XSRF-TOKEN", tokens.RequestToken, new CookieOptions { HttpOnly = false, Secure = false });
        }
        return _next(context);
    }
}

Но я обнаружил, что промежуточное программное обеспечение происходит только при первой загрузке страницы. После нажатия на ссылку - я ожидал, что мое промежуточное ПО будет снова запущено, но это не так.

По этой причине мой файл cookie AntiForgery недействителен, когда веб-интерфейс его подтвердил - URL-адрес изменился, а файл cookie - нет.

Как решить эту проблему?

1 Ответ

3 голосов
/ 23 октября 2019

Если ваше промежуточное программное обеспечение не запускается, это может означать, что приложение полностью загружено и загружено в клиент. Это означает, что он больше не использует рендеринг на стороне сервера, поскольку все теперь выполняется в браузере. Обычно это можно проверить, если вы наблюдаете за вкладкой «Сеть» в инструментах разработчика вашего браузера;если вы делаете новый запрос на основные файлы сценариев вашего SPA, приложение не завершило загрузку, и вы получаете ответ непосредственно с сервера.

Имейте в виду, что основные варианты использования для SSRдля SEO, оптимизации доставки мобильного контента и ускорения рендеринга и отображения страницы. SSR не будет отправлять все ваши запросы на сервер, как при обычной обратной передаче. Он упрощает требования к отображению представлений, но не заменяет поведение SPA на стороне клиента.

Согласно Angular2 ASP.NET Core AntiForgeryToken , вам может не понадобиться беспокоиться осоздание собственного промежуточного программного обеспечения для обработки маркеров защиты от подделки для запросов API. Angular должен просто обработать его для вас, когда он видит заголовок XSRF-TOKEN.

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