2009-04-20 7 views
13

En utilisant DotNetOpenAuth 3 dans ASP.NET MVC et mettre en œuvre une installation RememberMe ...RememberMe avec DotNetOpenId dans ASP.NET MVC

Je trouve que même si je mets createPersistentCookie à true dans FormsAuthentication.RedirectFromLoginPage et FormsAuthentication. SetAuthCookie l'utilisateur ne se souvient pas une fois que la session ASP.NET expire. Si j'inspecte le cookie, je trouve qu'il est marqué comme persistant et a une date d'expiration dans le futur, je suppose parce que j'ai défini mon délai d'expiration web.config FORMS dans quelques années. Quoi qu'il en soit, si l'utilisateur ferme le navigateur et le rouvre, il se souvient correctement - tant que la session ASP n'a pas expiré. De Scott Hanselmann fait que je me demande si c'est parce que FormsAuthentication essaie de renouveler le ticket d'authentification et peut-être dans un modèle OpenId qui ne fonctionne pas, mais j'ai mis FORMS SlidingExpiration = "false" dans web.config et de toute façon je Je pensais que forcer un cookie persistant rendrait ce truc inutile. Je me demande aussi pourquoi l'exemple DotNetOpenId MVC ne comprend pas de case à cocher RememberMe - peut-être y a-t-il quelque chose de compliqué?

D'un autre côté, ici, chez StackOverflow, je vois que je me souviens automatiquement d'une session à l'autre. Vous vous demandez s'ils ont utilisé autre chose que DotNetOpenId pour faire leur authentification OpenId.

Quelqu'un d'autre fait-il RememberMe réussi avec DotNetOpenId dans ASP.NET MVC? Des astuces?

[Mise à jour]

Merci d'avoir essayé d'aider, Andrew. Il s'avère que ce n'était pas à propos de DotNetOpenId.

Après avoir lu this, je conclus que mon fournisseur d'hébergement est susceptible de recycler régulièrement le pool d'applications et que le chiffrement du ticket d'authentification est effectué avec une nouvelle clé machine.

Selon l'article précédent lié I ajouté ce qui suit sous System.Web dans mon web.config et il résolu la question:

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

Salut Martin, StackOverflow utilise en effet DotNetOpenId. Je pense que votre problème de session de cookie n'a probablement rien à voir avec OpenID, car je ne pense pas que DNOI puisse interférer avec votre cookie et qu'il n'enregistre jamais un utilisateur. Je vais essayer de faire des recherches à ce sujet et poster une réponse si j'apprends quelque chose. –

+0

Merci pour cela. Cela m'a aidé. Vous devriez poster votre solution comme réponse afin qu'elle puisse être mise à jour et obtenir le badge "auto-apprenant" – BigJoe714

Répondre

2

Est-ce que le match de nom de cookie dans votre fichier web.config et votre contrôleur de appel à FormsAuthentication.SetAuthCookie? Cela peut être un bogue dans l'exemple DNOI, mais je soupçonne que si vous avez un nom de cookie dans votre fichier web.config (comme le fait l'exemple DNOI), alors vous devez probablement définir le cookie comme troisième paramètre de SetAuthCookie ou RedirectFromLoginPage . Sinon, les formulaires auth ne reconnaissent pas le cookie persistant défini comme cookie de connexion.

3

Je pense toujours que le nom de cookie devrait correspondre ... mais voici quelque chose d'autre.

Il semble que vous disiez que tant que votre délai d'attente dans le fichier web.config est grand, alors les choses fonctionnent. Mais une fois que vous l'écourtez, votre cookie persistant ne dure pas plus longtemps que la valeur du délai d'expiration. Ce sujet de forum a aidé pour répondre à moi pour ceci: http://forums.asp.net/p/1010241/1347970.aspx#1347970

Il semble que le délai d'attente dans web.config affecte tous les cookies. Il indique combien de temps dure le ticket d'authentification. Tous les cookies auth ont ce délai d'attente 'time to live' qu'ils soient 'persistants' ou non. La différence entre les cookies persistants et les cookies non persistants réside donc dans le fait que le premier durera pendant les différentes sessions du navigateur et que ce dernier mourra (tôt) si le navigateur est fermé.

Est-ce que cela a du sens?