Wir in der Web.config kein machine key spezifiziert, so erstellt ASP.net für jede Applikation einen eigenen Key. Wir nun die Applikation aus irgendeinen Grund recycled wird auch ein neuer Key genereriert. Nun kann es zu dieser Situation kommen, dass die Applikation während eines Requests recycled. Dann werden die Daten die mit dem vorigen Key zum Browser geladen wurden, mit dem zweiten Key überprüft. Dies führt zum MAC validation error weil die Keys nicht übereinstimmen. Dieser Fehler tritt auch auf, wenn die Applikation in einer Clusterumgebung betrieben wird wenn während eines Request zwischen verschiedenen Server verschoben wird.
Die Lösung hierfür ist die Spezifizierung eines Machine Keys in der Web.config. Aspnet benutzt dann diesen Key anstelle einen neuen zu generieren. Das stellt sicher dass nach dem Recyclen einer Applikation die Validierung weiterhin korrekt ist. Das Ganze wird für Session Cookies, Authentifizierung, Viewstat Validation, Event Validation etc. benutzt.
Wie erstelle ich einen Machine Key?
1. Besuchen Sie die Seite http://aspnetresources.com/tools/keycreator.aspx
2. Die Standardeinstellung für das Generieren des Keys sind (64/24/SHA1) -> Generate anklicken
3. Kopieren Sie den erzeugten Machine Key
4. Öffnen Sie Ihre Web.config und fügen Sie den Key an der Zeile <system.web> ein.
5. Speichern Sie die Web.config und starten Sie den IIS Applikationsservice neu.
Das sieht dann in etwas so in der Web.config aus
<system.web>
<machineKey validationKey=”2747B3AB746DDA724629E255EA4BCCF854A5FDDACB4E0AD944387E69A
552FF9D08A6C3EFA9FA6909223A81567FED9D79A977D94F04199C455D4B3E39AB3B15B5″ decryptionKey=”BDD6D114CBCEF616138CFC13459D359DDE3387F51D899E5C7AEB844
56D2922E5″ validation=”SHA1″ decryption=”AES” />