Какова правильная реализация промежуточного программного обеспечения, которое проверяет пользовательский 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>();

0 ответов

Другие вопросы по тегам