У меня есть приложение, написанное на 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 - нет.
Как решить эту проблему?