使用ASP.NET MVC中的DotNetOpenId记住我

时间:2009-04-20 13:58:42

标签: asp.net-mvc openid dotnetopenauth

在ASP.NET MVC中使用DotNetOpenAuth 3并实现RememberMe工具......

我发现即使我在FormsAuthentication.RedirectFromLoginPage和FormsAuthentication.SetAuthCookie中将createPersistentCookie设置为true,一旦ASP.NET会话超时,用户也不会记住

如果我检查cookie,我发现它被标记为持久性,并且将来确实有一个到期日期,我假设因为我将web.config FORMS超时设置为几年。无论如何,如果用户关闭浏览器并重新打开它,他们就会被正确记住 - 只要ASP会话没有超时。

Scott Hanselmann的

An older post让我想知道是不是因为FormsAuthentication尝试更新身份验证票证,而且可能在OpenId模型中无效但我在web.config中设置了FORMS SlidingExpiration =“false”无论如何,我认为强制持久性cookie会使这些东西无关紧要。

我也想知道为什么DotNetOpenId MVC示例不包含RememberMe复选框 - 可能有一些棘手的事情吗?

另一方面,在StackOverflow,我看到我会在会话中自动记住。想知道他们是否使用了除DotNetOpenId以外的东西进行OpenId认证。

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

[更新]

感谢您提供帮助,安德鲁。事实证明这不是关于DotNetOpenId。

我在阅读this之后收集到,我的托管服务提供商可能会定期回收应用程序池,这导致使用新机器密钥进行身份验证票证加密。

根据前面的链接文章,我在Web.Config的System.Web下添加了以下内容,它解决了这个问题:

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

2 个答案:

答案 0 :(得分:3)

我仍然认为cookie名称应该匹配......但是这里还有别的东西。

听起来你只是说你的web.config文件中的超时很大,然后就可以了。但是一旦你缩短它,你的持久cookie就不会超过超时值。这个论坛主题帮我解答了这个问题: http://forums.asp.net/p/1010241/1347970.aspx#1347970

似乎web.config中的超时会影响所有cookie。它说验证票持续多长时间。所有auth cookie都有“生存时间”超时,无论它们是否“持续”。因此,持久性cookie和非持久性cookie之间的区别在于前者将持续不同的浏览器会话,而后者将在浏览器关闭时(早期)死亡。

这有意义吗?

答案 1 :(得分:2)

您的web.config文件中的cookie名称是否匹配,以及您的控制器是否调用FormsAuthentication.SetAuthCookie?这可能是DNOI示例中的错误,但我怀疑如果您的web.config文件中有cookie名称(如DNOI示例所示),那么您可能必须将cookie名称设置为SetAuthCookie或RedirectFromLoginPage的第三个参数。否则,表单auth无法识别您设置为登录cookie的持久性cookie。