2009-09-04 6 views
8

Sie haben das wahrscheinlich schon einmal gelöst.Wie konfiguriere ich dotNetOpenId in einer Sitzung weniger Load-Balancing-Umgebung

Ich muss in der Lage sein, offene ID in einer Umgebung zu verwenden, die Session-Stickiness nicht hat. Die Server behalten die Header bei.

Ich benutze ASP.NET MVC und dotNetOpenId Version 3.2.0.9177. Obwohl die Authentifizierung auf der 3rd-Party-Website ohne Probleme verläuft, bekomme ich einen Fehler und die Authentifizierung schlägt fehl.

Irgendwelche Gedanken?

Antwort

6

Stateful

die optimierte Methode ist ein benutzerdefinierter Persistenzspeicher zu schreiben, die IRelyingPartyApplicationStore für die „Geheimnisse“ implementiert, dass OpenID RPs erfordern, und die Instanz an den OpenIdRelyingParty(IRelyingPartyApplicationStore) Konstruktor übergeben, oder es registriert in Ihrem web.config file.

Stateless

eine viel einfachere Lösung, die für die meisten Szenarien genügt stattdessen stateless Modus verwenden, so dass kein Staat über Ihre Web-Farm-Servern gemeinsam genutzt werden muss.

Sie können den statusfreien Modus aktivieren, indem Sie OpenIdRelyingParty als Instanz Ihres Anwendungsgeschäfts null instanziieren. Der Aufruf des Standardkonstruktors führt dazu, dass DNOA seinen speicherinternen Speicher verwendet, der bei Serverfarmen unterbrochen wird, sodass der Standardkonstruktor nicht ausreicht.

Oder wenn Sie die ASP.NET-Steuerelemente verwenden, setzen Sie einfach Stateless = true auf das Steuerelement.

+0

Danke. Der staatenlose Teil scheint es behoben zu haben. –

1

Mit DotNetOpenID sollten Sie in der Lage sein, den Zustand, den Sie während der Authentifizierung für den Client benötigen, über ein Cookie beizubehalten.

Bearbeiten: Ich habe keinen Beispielcode dafür, weil ich DotNetOpenID nie in einer sitzungslosen Umgebung verwenden musste, aber ich würde diesen Link überprüfen, könnte es die Informationen, die Sie benötigen: http://code.google.com/p/dotnetopenid/wiki/WebFarmHowto

+0

Ich habe etwas ähnliches für etwas in TempData, aber irgendwelche Codebeispiele für die DotNetOpenID verwendet? Ich bin noch nicht damit vertraut. Danke –

+0

Ich habe keine Codebeispiele zur Hand, aber überprüfen Sie den Link, den ich zur Verfügung gestellt habe. – mkchandler

4

Hier ist, wie wir damit stateless:

var uri = new Uri(Request.Url, Request.RawUrl); 
var openid = new OpenIdRelyingParty(null, uri, 
      Request.HttpMethod == "GET" ? Request.QueryString : Request.Form); 

scheint bisher zu arbeiten, obwohl pro Andrew ist es eine kleine Performance-Einbußen. Nicht sicher, dass das wichtig ist, seit Login ist eine ziemlich seltene Aktivität.

+0

Dieser Konstruktor mit drei Parametern ist für DotNetOpenId 2.x geeignet, während der Konstruktor mit einem Parameter für den zustandslosen Modus für DotNetOpenAuth 3.x geeignet ist. –

+0

Danke Herr Coding Horror/Einer der Schöpfer von Stackoverflow. Ich werde es Montag Morgen versuchen. –