2011-08-10 9 views
5

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ę!

+1

Czy sprawdziłeś swoje łatki? http://blog.evonet.com.au/post/SystemSecurityCryptographyCryptographicException-Length-of-the-data-to-decrypt-is-invalid.aspx –

+0

@ Surfer513 - przygotuj odpowiedź; Nie jestem jeszcze pewien - ale rozmawiając z jednym z zespołów wsparcia może to być przyczyną ... –

Odpowiedz

5

Kiedy różne serwery mają różne łatki, ma potencjał, by zmienić zachowanie szyfrowania (/ deszyfrowania), więc być może przyczyną tego wyjątek środowiska wykonawczego:

System.Security.Cryptography.CryptographicException: Length of the data to decrypt is invalid. 

Więcej informacji na temat tego problemu można znaleźć tutaj: http://blog.evonet.com.au/post/SystemSecurityCryptographyCryptographicException-Length-of-the-data-to-decrypt-is-invalid.aspx

+0

@ Surfer512 - Było tyle aktualizacji, że jedno z urządzeń musi zostać wykonane w ciągu jednej nocy (powiedzmy, że miało dziesięć razy tyle, ile potrzeba, na drugim ...) - więc będę mógł wtedy dokonać aktualizacji. Twoje zdrowie! –

+0

Link w odpowiedzi jest martwy - * "Nie można znaleźć tej witryny/blog.evonet.com.au Nie znaleziono adresu DNS serwera" * – Pang