2009-04-20 2 views
13

Mit DotNetOpenAuth 3 in ASP.NET MVC und Implementierung einer RememberMe Einrichtung ...RememberMe mit DotNetOpenId in ASP.NET MVC

Ich finde, dass, selbst wenn ich gesetzt createPersistentCookie auf true in FormsAuthentication.RedirectFromLoginPage und FormsAuthentication. SetAuthCookie der Benutzer nicht erinnert wird einmal die ASP.NET-Sitzung aus ausläuft.

Wenn ich den Cookie überprüfe, finde ich, dass er als persistent markiert ist und in der Zukunft ein Ablaufdatum hat, nehme ich an, weil ich mein web.config FORMS Timeout auf ein paar Jahre eingestellt habe. Wenn der Benutzer den Browser schließt und ihn erneut öffnet, werden sie jedoch korrekt gespeichert - solange die ASP-Sitzung nicht abgelaufen ist.

An older post von Scott Hanselmanns lässt mich fragen, ob es ist, weil FormsAuthentication versucht, das Authentifizierungsticket zu erneuern und vielleicht in einem OpenId-Modell, das nicht funktioniert, aber FORMS SlidingExpiration = "false" in web.config gesetzt habe und sowieso ich dachte, dass das Erzwingen eines dauerhaften Cookies dieses Zeug irrelevant machen würde.

Ich frage mich auch, warum das DotNetOpenId MVC-Beispiel keine RememberMe-Checkbox enthält - vielleicht gibt es da etwas Schwieriges?

Auf der anderen Seite, hier bei StackOverflow ich sehe, ich werde automatisch über Sitzungen erinnert. Sie fragen sich, ob sie etwas anderes als DotNetOpenId für ihre OpenId-Authentifizierung verwendet haben.

Hat jemand anderes RememberMe erfolgreich mit DotNetOpenId in ASP.NET MVC getan? Irgendwelche Tricks?

[Update]

Dank für den Versuch, Andrew zu helfen. Es stellte sich heraus, dass es sich nicht um DotNetOpenId handelte.

Ich sammle nach dem Lesen this, dass mein Hosting-Provider wahrscheinlich den App-Pool regelmäßig recyceln und das die Authentifizierung Ticket-Verschlüsselung mit einem neuen Computerschlüssel durchgeführt wird.

Gemäß dem verlinkten Artikel vorhergehenden habe ich folgende unter System.Web in meinem Web.Config und es das Problem behoben:

<machineKey 
    validationKey="(generated a new key to place here)"  
    decryptionKey="(generated a new key to place here)" 
    validation="SHA1" 
    decryption="AES" /> 
+0

Hallo Martin, StackOverflow verwendet tatsächlich DotNetOpenId. Ich denke, dass Ihr Cookie-Session-Problem wahrscheinlich nichts mit OpenID zu tun hat, da ich denke, dass es keine Chance für DNOI gibt, sich in Ihren Cookie einzumischen und keinen Benutzer auszuloggen. Ich werde versuchen, etwas darüber zu recherchieren und eine Antwort zu posten, wenn ich etwas lerne. –

+0

Vielen Dank dafür. Es hat mir geholfen. Sie sollten Ihre Lösung als Antwort posten, damit sie uplooted und das "self learner" -Abzeichen erhalten kann – BigJoe714

Antwort

2

das Name Spiel Cookie in Ihrer web.config-Datei und Ihre Controller Aufruf an FormsAuthentication.SetAuthCookie? Dies kann ein Fehler im DNOI-Beispiel sein, aber ich vermute, wenn Sie einen Cookie-Namen in Ihrer Datei web.config haben (wie das DNOI-Beispiel), dann müssen Sie wahrscheinlich den Cookie-Namen als dritten Parameter für SetAuthCookie oder RedirectFromLoginPage setzen . Andernfalls erkennt forms auth den permanenten Cookie nicht, den Sie als Login-Cookie festgelegt haben.

3

Ich denke immer noch, dass der Cookie-Name übereinstimmen sollte ... aber hier ist noch etwas anderes.

Es klingt wie Sie sagen, solange Ihr Timeout in der Datei web.config groß ist, dann funktionieren die Dinge. Aber sobald Sie es gekürzt haben, übersteht Ihr persistenter Cookie den Timeout-Wert nicht. Dieses Forenthema half mir bei der Beantwortung: http://forums.asp.net/p/1010241/1347970.aspx#1347970

Es scheint, dass das Timeout in web.config alle Cookies betrifft. Es sagt aus, wie lange das Authentifizierungsticket dauert. Alle Authentifizierungscookies haben diese Time-to-Live-Zeit, unabhängig davon, ob sie persistent sind oder nicht. Der Unterschied zwischen persistenten Cookies und nicht persistenten Cookies besteht darin, dass erstere über verschiedene Browsersitzungen hinweg bestehen und letztere (früh), wenn der Browser geschlossen wird, abstürzen.

Macht das Sinn?