si vous utilisez RC2 ignorer tout le code du filtre tout ce que vous devez faire estComment valider l'en-tête jeton anti-contrefaçon Ajax en utilisant IAuthorizationFilter dans MVC6 RC1 RC2
StartUp.cs
services.AddAntiforgery(options => options.HeaderName = "YOUR_HEADER_NAME");
Pour RC1
Auparavant, j'ai utilisé un filtre IAuthorization pour valider les jetons AntiForgery, mais il semble que les choses aient radicalement changé dans MVC6. Je ne trouve aucune documentation décrivant les changements de filtrage.
Ceci est mon ancien code
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
public sealed class CustomValidateAntiForgeryTokenAttribute : FilterAttribute, IAuthorizationFilter
{
// why is this necessary..
// take a look here http://www.asp.net/web-api/overview/security/preventing-cross-site-request-forgery-%28csrf%29-attacks
// the CSRF token is inserted into the AJAX header
//
public Task<HttpResponseMessage> ExecuteAuthorizationFilterAsync(HttpActionContext actionContext, CancellationToken cancellationToken, Func<Task<HttpResponseMessage>> continuation)
{
if (actionContext == null)
{
throw new ArgumentNullException("actionContext");
}
if (continuation == null)
{
throw new ArgumentNullException("continuation");
}
try
{
// insanely easy -- just extart the cookie token and the headertoken - it they are null who cares the validation will fail
var headerToken = actionContext.Request.Headers.GetValues("__RequestVerificationToken").FirstOrDefault(); // ajax headers
var cookieToken = actionContext.Request.Headers.GetCookies().Select(s => s[AntiForgeryConfig.CookieName]).FirstOrDefault();
AntiForgery.Validate(cookieToken.Value, headerToken);
}
catch (HttpAntiForgeryException)
{
actionContext.Response = new HttpResponseMessage
{
StatusCode = HttpStatusCode.Forbidden,
RequestMessage = actionContext.ControllerContext.Request
};
return FromResult(actionContext.Response);
}
return continuation();
}
private Task<HttpResponseMessage> FromResult(HttpResponseMessage result)
{
var source = new TaskCompletionSource<HttpResponseMessage>();
source.SetResult(result);
return source.Task;
}
}
[Authorize]
public class SubmissionController : ApiController
{
[CustomValidateAntiForgeryToken] // note this is a custom filter, named to clarify its not the built in one as thats for views!
public HttpResponseMessage Delete(int? ID) {.. blah ..}
- Quelle est la méthode recommandée pour obtenir la même chose en MVC6?
- Quelqu'un peut-il me diriger vers la documentation?
Merci
[MVC Filtre en Documentation] (https://docs.asp.net/en/latest/mvc/controllers/filters.html). Je ne sais pas ce que plus d'une réponse dont vous avez besoin, il semble assez simple (pour ne pas mentionner, pas si différent de MVC 5). – NightOwl888
Merci .. J'ai vraiment raté cette documentation – PingCrosby