it-swarm.com.de

Das Anti-Fälschungs-Token konnte nicht entschlüsselt werden

Ich habe eine Form:

@using (Html.BeginForm(new { ReturnUrl = ViewBag.ReturnUrl })) {
@Html.AntiForgeryToken()
@Html.ValidationSummary()...

und Aktion:

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginModel model, string returnUrl, string City)
{
}

gelegentlich (einmal pro Woche) erhalte ich den Fehler: 

Das Anti-Fälschungs-Token konnte nicht entschlüsselt werden. Wenn diese Anwendung .__ ist. Stellen Sie sicher, dass alle Computer ausgeführt werden dieselbe Version von ASP.NET-Webseiten und die Konfiguration gibt explizite Verschlüsselungs- und Validierungsschlüssel an. AutoGenerate kann nicht in einem Cluster verwendet werden.

ich versuche es zu Webconfig hinzuzufügen:

<machineKey validationKey="AutoGenerate,IsolateApps"  
    decryptionKey="AutoGenerate,IsolateApps" />

der Fehler erscheint jedoch immer noch gelegentlich

Ich habe festgestellt, dass dieser Fehler beispielsweise auftritt, wenn eine Person von einem Computer kam und dann einen anderen Computer ausprobierte

Oder manchmal wird ein automatischer Wertesatz mit falschem Datentyp wie bool als Ganzzahl in das Formularfeld durch einen beliebigen jQuery-Code eingefügt. 

46
user3331122

Ich habe gerade auch diesen Fehler erhalten und wurde in meinem Fall dadurch verursacht, dass das Anti-Fälschungs-Token zweimal in derselben Form angewendet wurde. Die zweite Instanz kam aus einer Teilansicht und war daher nicht sofort offensichtlich.

114
Steve Dowling

validationKey = "AutoGenerate" 

Dadurch wird ASP.NET angewiesen, bei jedem Start der Anwendung einen neuen Verschlüsselungsschlüssel zu generieren, der zum Verschlüsseln von Authentifizierungs-Tickets und Fälschungsschutz-Token verwendet wird. Wenn Sie eine Anforderung erhalten haben, die einen anderen Schlüssel verwendet hat (z. B. vor einem Neustart), um die Elemente der Anforderung (z. B. Authentifizierungscookies) zu verschlüsseln, kann diese Ausnahme auftreten.

Wenn Sie sich von "AutoGenerate" wegbewegen und ihn speziell angeben (den Verschlüsselungsschlüssel), werden Anforderungen, die von diesem Schlüssel abhängen, korrekt entschlüsselt, und die Validierung funktioniert vom Neustart der Anwendung bis zum Neustart. Zum Beispiel:

<machineKey  
validationKey="21F090935F6E49C2C797F69BBAAD8402ABD2EE0B667A8B44EA7DD4374267A75D7
               AD972A119482D15A4127461DB1DC347C1A63AE5F1CCFAACFF1B72A7F0A281B"           
decryptionKey="ABAA84D7EC4BB56D75D217CECFFB9628809BDB8BF91CFCD64568A145BE59719F"
validation="SHA1"
decryption="AES"
/>

Sie können nach Herzenslust auf der MSDN-Seite lesen: How To: Konfigurieren Sie MachineKey in ASP.NET

21
Domin8urMind

Generieren Sie einfach <machineKey .../>-Tag aus einen Link für Ihre Framework-Version und fügen Sie ihn in <system.web><system.web/> in der Web.config ein, falls er nicht vorhanden ist.

Hoffe das hilft.

9
logical8

Wenn Sie von Google für Ihren eigenen Entwicklercomputer mit diesem Fehler hierher kommen, versuchen Sie, Cookies im Browser zu löschen. Clear Browser Cookies funktionierten für mich.

4
ramons03

Ich bin auf dieses Problem in einem Codebereich gestoßen, in dem ich eine Ansicht hatte, die eine Teilansicht aufgerufen hat. Statt jedoch eine Teilansicht zurückzugeben, gab ich eine Ansicht zurück.

Ich habe mich verändert:

return Ansicht (Index);

zu 

PartialView (Index) zurückgeben;

in meiner Kontrolle und das mein Problem behoben.

3
armstb01

Ich erhalte diese Fehlermeldung, wenn die Seite alt ist ("abgestanden"). Eine Aktualisierung des Tokens über ein Neuladen der Seite behebt mein Problem. Es scheint eine Auszeit zu geben.

1
barrypicker

Ich habe diesen Fehler in .NET Core 2.1 erhalten. Ich habe es behoben, indem ich den Datenschutzdienst in Startup hinzugefügt habe:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDataProtection();
    ....
}
1
Cosmin

Wenn Sie Kubernetes verwenden und mehr als einen Pod für Ihre App haben, führt dies höchstwahrscheinlich zum Scheitern der Anforderungsvalidierung, da der Pod, der das RequestValidationToken generiert, nicht unbedingt der Pod ist, der das Token beim POSTing in Ihre Anwendung validiert. Das Update sollte darin bestehen, den Nginx-Controller oder die von Ihnen verwendete Ingress-Ressource zu konfigurieren und den Lastausgleich so anzugeben, dass jeder Client einen Pod für die gesamte Kommunikation verwendet.

Update: Ich konnte das Problem beheben, indem ich meinem Ingress die folgenden Anmerkungen hinzufügte:

https://kubernetes.github.io/ingress-nginx/examples/affinity/cookie/

Name    Description Values
nginx.ingress.kubernetes.io/affinity    Sets the affinity type  string (in NGINX only cookie is possible
nginx.ingress.kubernetes.io/session-cookie-name Name of the cookie that will be used    string (default to INGRESSCOOKIE)
nginx.ingress.kubernetes.io/session-cookie-hash Type of hash that will be used in cookie value  sha1/md5/index
0
PussInBoots