2009-04-20 46 views
13

在ASP.NET MVC使用DotNetOpenAuth 3和實施了rememberMe設施...了rememberMe與DotNetOpenId在ASP.NET MVC

我發現,即使我在FormsAuthentication.RedirectFromLoginPage和FormsAuthentication設置createPersistentCookie爲true。 SetAuthCookie用戶不記得一旦ASP.NET會話超時

如果我檢查cookie,我發現它被標記爲持久性的,並且在將來確實有過期日期方式,我假設因爲我將web.config FORMS超時設置爲幾年。無論如何,如果用戶關閉瀏覽器並重新打開它,則只要ASP會話沒有超時,它們就會被正確記住。

An older post Scott Hanselmann's讓我懷疑是否因爲FormsAuthentication試圖更新身份驗證票證,並且可能在OpenId模型中不起作用,但我在web.config中設置了FORMS SlidingExpiration =「false」認爲強制持久性cookie會使這些東西無關緊要。

我也想知道爲什麼DotNetOpenId MVC示例不包括一個RememberMe複選框 - 也許有一些棘手的事情呢?

另一方面,在StackOverflow中,我看到我在會話中自動記住。想知道他們是否使用DotNetOpenId以外的其他方式來進行OpenId身份驗證。

其他人完成RememberMe成功地在ASP.NET MVC中使用DotNetOpenId?任何技巧?

[更新]

謝謝你試圖幫助,安德魯。原來這不是DotNetOpenId。

我在閱讀this後收集到我的託管服務提供商可能會定期回收應用程序池,導致身份驗證票證加密使用新的機器密鑰。

按前鏈接文章中,我添加的System.Web下,按照我的web.config,它解決了這個問題:

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

嗨馬丁, StackOverflow確實使用DotNetOpenId。 我認爲你的cookie會話問題可能與OpenID無關,因爲我不認爲DNOI有任何機會干擾你的cookie,並且它不會記錄用戶。我會嘗試對此進行一些研究併發佈一個答案,如果我學到了什麼。 – 2009-04-22 01:53:23

回答

2

是否cookie名稱匹配在web.config文件和你的控制器調用FormsAuthentication.SetAuthCookie?這可能是DNOI示例中的一個錯誤,但我懷疑如果您的web.config文件中有cookie名稱(如DNOI示例所示),那麼您可能必須將cookie名稱設置爲SetAuthCookie或RedirectFromLoginPage的第三個參數。否則,表單身份驗證不會識別您設置爲登錄cookie的持久性cookie。

3

我仍然認爲cookie名稱應該匹配......但這裏還有其他的東西。

這聽起來像你說的只要你的web.config文件中的超時大,那麼事情就會起作用。但是,一旦你縮短它,你的持久性cookie不會超過超時值。這個論壇主題幫我回答了這個問題: http://forums.asp.net/p/1010241/1347970.aspx#1347970

看來web.config中的超時會影響所有的cookie。它說認證票證持續多久。所有auth cookie都有這個「生存時間」超時,無論它們是否是「持久性」。因此,持久性cookie和非持久性cookie之間的區別在於,前者將持續跨越不同的瀏覽器會話,如果瀏覽器關閉,後者將會(早期)消亡。

這有道理嗎?