to dosłownie doprowadza mnie banany - Jestem na wakacjach, począwszy od jutra, ale jeśli nie mogę dostać tej pracy już wtedy jest zagrożone - tak każda pomoc mile widziane!Forms Authentication 4.0 na Web Farm
Po pierwsze, moja witryna ma zdefiniowany ręcznie element <machinekey />
, tak że oba serwery w farmie internetowej są zsynchronizowane. Zweryfikowałem to z menadżerem IIS (stąd dlaczego pytam, pomimo podobieństwa z tak wieloma innymi pytaniami). Wygląda to tak (klawisze pomijana - ale są one prawidłowe długość):
<machineKey validationKey="[512 bit hex]"
decryptionKey="[256-bit hex]"
validation="SHA1"
decryption="AES" />
Strona działa Asp.Net MVC3 i używam uwierzytelniania formularzy w trybie „normalnym” (czyli nie 2,0 trybu kompatybilnego). Używam uwierzytelniania formularzy do tworzenia bilet uwierzytelnienia - za pomocą kodu tak:
FormsAuthentication.SetAuthCookie(userName, false);
moich formularzy Auth config jest bardzo prosta; nie istnieją żadne ustawienia IIS lub całego serwera w miejscu, które przesłaniają udokumentowane domyślne:
<authentication mode="Forms">
<forms defaultUrl="~/Unauthorised"
loginUrl="~/Unauthorised"
ticketCompatibilityMode="Framework40" />
</authentication>
A potem mam porwany cookie czytania funkcjonalność as per this MSDN topic tak, że mogę tworzyć kapitał i tożsamość, które chcę.
Problem jest - tylko jedna połowa gospodarstwie internetowej jest w stanie odszyfrować plik cookie uwierzytelniania, a druga połowa (czyli w zależności od tego jeden nie uwierzytelnienia użytkownika) po prostu daje:
System.Security.Cryptography.CryptographicException: Length of the data to decrypt is invalid.
Z tego jako górnej części śladu stosu:
[CryptographicException: Length of the data to decrypt is invalid.]
System.Security.Cryptography.RijndaelManagedTransform.TransformFinalBlock(Byte[] inputBuffer, Int32 inputOffset, Int32 inputCount) +12521039
System.Security.Cryptography.CryptoStream.FlushFinalBlock() +53
System.Web.Configuration.MachineKeySection.EncryptOrDecryptData(Boolean fEncrypt, Byte[] buf, Byte[] modifier, Int32 start, Int32 length, Boolean useValidationSymAlgo, Boolean useLegacyMode, IVType ivType) +331
System.Web.Security.FormsAuthentication.Decrypt(String encryptedTicket) +293
używamy nieco starożytny (ale bardzo wiarygodne) równoważenia obciążenia - co nie zmienia ruch HTTP - i th ruch e w tym przypadku to HTTPs; Jestem w stanie sprawdzić, czy jest to zawsze jeden serwer, a nie oba, po użyciu Fiddlera do odszyfrowania i sprawdzenia ruchu.
To wyraźnie wskazuje na niezsynchronizowane machineKey
s - ale one nie są - więc masz pojęcie, co się dzieje !!?
Z góry dziękuję!
Czy sprawdziłeś swoje łatki? http://blog.evonet.com.au/post/SystemSecurityCryptographyCryptographicException-Length-of-the-data-to-decrypt-is-invalid.aspx –
@ Surfer513 - przygotuj odpowiedź; Nie jestem jeszcze pewien - ale rozmawiając z jednym z zespołów wsparcia może to być przyczyną ... –