Какова правильная реализация промежуточного программного обеспечения, которое проверяет пользовательский XSRF-TOKEN?
Мне не повезло получить асп antiforgery
токен работает в моем угловом приложении. я использую JWT
и я нашел этот пост, который предлагает обходной путь, чтобы избежать атак CSRF. так что я включил xsrfToken
в моем JWT
которые хранятся в защищенном файле cookie, и при входе в систему я сохраняю то же самое xsrfToken
данное значение в localStorage
, Теперь я хочу сравнить оба значения на каждом HttpRequest
и сделать запрос недействительным, если эти значения не совпадают. Я написал следующее промежуточное программное обеспечение: "Мой первый раз напишу, и оно не работает правильно, я не могу понять, что я делаю неправильно".
Я проверил мой заголовок и мой JWT
cookie и оба содержат xsrfToken
значение.
это моя реализация,
public class ValidateXSRFToken
{
private readonly RequestDelegate next;
public ValidateXSRFToken(RequestDelegate next)
{
this.next = next;
}
public Task Invoke(HttpContext context, TokenValidatedContext tokenContext)
{
string requestedXSRFHeader = context.Request.Headers["X-XSRF-TOKEN"];
var userPrincipal = tokenContext.Principal;
var XSRFClaimValue = userPrincipal.Claims.Where(c => c.Type == "xsrfToken").Single().Value;
if (requestedXSRFHeader != XSRFClaimValue)
{
throw new Exception("Invalid token");
}
return next(context);
}
}
и в моем запуске configure
метод я его инициализирую,
app.UseMiddleware<ValidateXSRFToken>();