Automatischer CSRF-Schutz in ASP.NET Core

Automatischer CSRF-Schutz in ASP.NET Core

- Matt

Ich hatte einen Minimal-API-Endpunkt, der ein Formular per [FromForm] einliest, und bekam beim Absenden ohne mein Zutun ein 400 zurück. Die Ursache: ASP.NET Core validiert bei Formularbindung automatisch das Antiforgery-Token. Die Middleware landet schon in der Pipeline, sobald etwas wie AddRazorComponents oder MapControllerRoute sie einzieht, UseAntiforgery ruft man nicht mehr selbst auf. Geprüft wird nur bei POST, PUT und PATCH und nur, wenn der Endpunkt Formulardaten bindet. Reine JSON-Endpunkte bleiben außen vor, was für Cookie-lose APIs auch richtig ist.

Der Haken: Der Schutz hängt an der Bindung, nicht an der Route. Ein Endpunkt mit Token-Authentifizierung, der trotzdem ein Formular annimmt, blockiert dich, bis du ihn mit DisableAntiforgery() ausnimmst. Und das Token muss weiterhin von Hand ins Formular. Geschenkt bekommt man nur die Prüfung, nicht die Auslieferung.