2017-01-05 16 views
1

Я хочу проверить токен AntiForgery в приложении ASP.NET Core. Я знаю, что я могу по отдельности сделать это путем добавления [AutoValidateAntiforgeryToken] или [ValidateAntiforgeryToken] атрибутов по методам действий, как предложено в SO размещать hereПроверка маркера AntiForgery глобально в ASP.NET Core

Я ищу глобальный подход для проверки маркеров для всех методов POST. Поэтому я создал промежуточное ПО для этого. Однако я не смог найти подходящий метод для проверки токена. Как и в классическом asp.net, есть AntiForgery.Validate(). Что эквивалентный метод в ASP.NET Ядра

public class ValidateAntiForgeryTokenMiddleware 
{ 
    private readonly RequestDelegate _next; 

    public ValidateAntiForgeryTokenMiddleware(RequestDelegate next) 
    { 
     _next = next; 
    } 

    public async Task Invoke(HttpContext httpContext) 
    { 
     if (httpContext.Request.Method.ToUpper() == "POST") 
     { 
      // where does this mehod exists? 
      // i could not find it in Microsoft.AspNetCore.Antiforgery namespace 
      AntiForgery.Validate(); 
     } 

     await _next(httpContext); 
    } 
} 

public static class ValidateAntiForgeryTokenMiddlewareExtensions 
{ 
    public static IApplicationBuilder UseValidateAntiForgeryToken(this IApplicationBuilder builder) 
    { 
     return builder.UseMiddleware<ValidateAntiForgeryTokenMiddleware>(); 
    } 
} 

ответ

0

Я должен Вводят Antiforgery как сервис

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

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

    public async Task Invoke(HttpContext httpContext) 
    { 
     if (httpContext.Request.Method.ToUpper() == "POST") 
     { 
      await _antiforgery.ValidateRequestAsync(httpContext); 
     } 

     await _next(httpContext); 
    } 
} 

добавить Antiforgery как сервис в startup.cs

public void ConfigureServices(IServiceCollection services) 
    {  
     services.AddAntiforgery(); 
    } 

использовать мой middlware

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IApplicationLifetime appLifetime) 
    { 
     app.UseValidateAntiForgeryToken(); 

    }