2009-04-20 12 views
13

Utilizzando DotNetOpenAuth 3 in ASP.NET MVC e l'attuazione di un impianto RememberMe ...RememberMe con DotNetOpenId in ASP.NET MVC

Ho constatato che, anche se ho impostato createPersistentCookie al vero in FormsAuthentication.RedirectFromLoginPage e FormsAuthentication. SetAuthCookie l'utente non viene ricordato una volta scaduta la sessione ASP.NET.

Se controllo il cookie, trovo che sia contrassegnato come persistente e che abbia una data di scadenza in futuro, presumo perché ho impostato il timeout FORMS web.config a qualche anno di distanza. In ogni caso, se l'utente chiude il browser e lo riapre, vengono ricordati correttamente, purché la sessione ASP non sia scaduta.

An older post di Scott Hanselmann di mi domando se è perché FormsAuthentication cerca di rinnovare il ticket di autenticazione e magari in un modello OpenID che non funziona, ma ho impostato FORME slidingExpiration = "false" nel web.config e comunque io pensavo che forzare un cookie persistente avrebbe reso quella roba irrilevante.

Mi chiedo anche perché il campione MVC DotNetOpenId non include una casella di controllo RememberMe - forse c'è qualcosa di complicato a riguardo?

D'altra parte, qui a StackOverflow vedo che sono automaticamente ricordato tra le sessioni. Mi chiedo se hanno usato qualcosa di diverso da DotNetOpenId per fare la loro autenticazione OpenId.

Chiunque altro ha fatto RememberMe con successo con DotNetOpenId in ASP.NET MVC? Qualche trucco?

[Update]

Grazie per cercare di aiutare, Andrew. Si è scoperto che non si trattava di DotNetOpenId.

Raccolgo, dopo aver letto this, che il mio provider di hosting sta probabilmente riciclando il pool di app regolarmente e ciò sta causando la crittografia del ticket di autenticazione da eseguire con una nuova chiave di macchina.

Come per il precedente articolo collegato ho aggiunto il seguente punto System.Web nel mio web.config ed è risolto il problema:

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

Hi Martin, StackOverflow utilizza effettivamente DotNetOpenId. Penso che il tuo problema con la sessione di cookie probabilmente non ha nulla a che fare con OpenID, dal momento che non penso ci sia alcuna possibilità che DNOI interferisca con il tuo cookie e non registra mai un utente. Cercherò di fare qualche ricerca su questo e pubblicare una risposta se imparo qualcosa. –

+0

Grazie per questo. Mi ha aiutato. Dovresti postare la tua soluzione come risposta in modo che possa essere upvoted e ottenere il badge "self learner" – BigJoe714

risposta

2

significa il nome partita di cookie nel file web.config e il controller di chiamare a FormsAuthentication.SetAuthCookie? Questo potrebbe essere un bug nell'esempio DNOI, ma sospetto che se hai un nome cookie nel tuo file web.config (come fa l'esempio DNOI), allora probabilmente devi impostare il nome del cookie come terzo parametro in SetAuthCookie o RedirectFromLoginPage . In caso contrario, form auth non riconosce il cookie persistente impostato come cookie di accesso.

3

Continuo a pensare che il nome del cookie debba corrispondere ... ma qui c'è qualcos'altro.

Sembra che tu dica fino a quando il tuo timeout nel file web.config è grande, quindi le cose funzionano. Ma una volta abbreviato, il tuo cookie persistente non supererà il valore di timeout. Questo argomento del forum mi ha aiutato a rispondere a questa domanda: http://forums.asp.net/p/1010241/1347970.aspx#1347970

Sembra che il timeout in web.config riguardi tutti i cookie. Dice quanto dura il ticket di autenticazione. Tutti i cookie di autenticazione hanno questo timeout "time to live" se sono "persistenti" o meno. Quindi la differenza tra cookie persistenti e cookie non persistenti è che il primo durerà attraverso diverse sessioni del browser e quest'ultimo morirà (in anticipo) se il browser è chiuso.

Ha senso?