2010-03-24 11 views
5

WprowadzenieNieprawidłowy podpis komunikat przy uruchamianiu OpenID Provider na Klastra

Mamy OpenID Provider, który stworzyliśmy przy użyciu składnika DotNetOpenAuth. Wszystko działa wspaniale, gdy uruchamiamy dostawcę w jednym węźle, ale kiedy przenosimy dostawcę do klastra równoważonego obciążeniem, w którym wiele serwerów obsługuje żądania dla każdej sesji, pojawia się problem z podpisywaniem wiadomości, ponieważ komponent DotNetOpenAuth wydaje się używać czegoś unikalnego z każdego węzła klastra, aby utworzyć podpis.

Wyjątek

DotNetOpenAuth.Messaging.Bindings.InvalidSignatureException: Message signature was incorrect. 
    at DotNetOpenAuth.OpenId.ChannelElements.SigningBindingElement.ProcessIncomingMessage(IProtocolMessage message) in c:\BuildAgent\work\7ab20c0d948e028f\src\DotNetOpenAuth\OpenId\ChannelElements\SigningBindingElement.cs:line 139 
    at DotNetOpenAuth.Messaging.Channel.ProcessIncomingMessage(IProtocolMessage message) in c:\BuildAgent\work\7ab20c0d948e028f\src\DotNetOpenAuth\Messaging\Channel.cs:line 940 
    at DotNetOpenAuth.OpenId.ChannelElements.OpenIdChannel.ProcessIncomingMessage(IProtocolMessage message) in c:\BuildAgent\work\7ab20c0d948e028f\src\DotNetOpenAuth\OpenId\ChannelElements\OpenIdChannel.cs:line 172 
    at DotNetOpenAuth.Messaging.Channel.ReadFromRequest(HttpRequestInfo httpRequest) in c:\BuildAgent\work\7ab20c0d948e028f\src\DotNetOpenAuth\Messaging\Channel.cs:line 378 
    at DotNetOpenAuth.OpenId.RelyingParty.OpenIdRelyingParty.GetResponse(HttpRequestInfo httpRequestInfo) in c:\BuildAgent\work\7ab20c0d948e028f\src\DotNetOpenAuth\OpenId\RelyingParty\OpenIdRelyingParty.cs:line 493 

Konfiguracja

Mamy konfiguracji maszyna config aby używać tego samego klucza maszynowego na wszystkich węzłach klastra i mamy konfigurację out sesji procesu z SQL Server.

Pytanie

Jak możemy skonfigurować klucz używany przez DotNetOpenAuth podpisać swoje wiadomości tak, że klient zaufa odpowiedzi od wszystkich serwerów w klastrze podczas tej samej sesji?

+0

Myślę, że mamy ten sam problem: http://stackoverflow.com/questions/2505565/dotnetopenauth-message-was-was-incorrect –

+0

Mieliśmy podobny problem, ale zamiast tego zdecydowaliśmy się stworzyć sklep nonce, który był dość proste i działa całkiem dobrze w naszych konfiguracjach farmy/ogrodu. Ale problem, który mamy teraz, jest z naszym własnym dostawcą, który próbujemy przenieść na farmę, a nie na RP. – Garth

Odpowiedz

3

Należy wdrożyć IProviderApplicationStore i przekazać instancję tego obiektu do instancji OpenIdProvider tworzonej lub ustawić typ sklepu w pliku web.config. Wdrożenie tego interfejsu musi zapewniać dostęp do bazy danych, którą udostępniają wszystkie serwery w farmie sieci.

+0

Oczywiście wydaje się to tak oczywiste teraz, kiedy to mówisz, zwłaszcza, że ​​zrobiliśmy już to samo dla RP. Dzięki. – Garth

+1

Ten interfejs został w dzisiejszych czasach zmieniony na "IOpenIdApplicationStore". –

1

Po utworzeniu OpenIdRelyingParty upewnij się, że przekazałeś null w konstruktorze.

Dzięki temu twoja strona internetowa staje się bezstanowym systemem OpenID lub trybem "niemy". Logowanie jest nieco wolniejsze (jeśli zauważysz), ale unikasz konieczności pisania IRelyingPartyApplicationStore, aby umożliwić DotNetOpenAuth pracę w twojej farmie;

var openIdRelyingParty = new OpenIdRelyingParty(null); 
+1

To nie jest przekaźnik, ale dostawca. – Garth

Powiązane problemy