在 ASP.NET MVC 中使用 DotNetOpenAuth 3 并实现 RememberMe 工具...
我发现即使我在 FormsAuthentication.RedirectFromLoginPage 和 FormsAuthentication.SetAuthCookie 中将 createPersistentCookie 设置为 true,一旦 ASP.NET 会话超时,用户也不会被记住。
如果我检查 cookie,我发现它被标记为持久性并且将来确实有到期日期,我假设是因为我将 web.config FORMS 超时设置为几年后。无论如何,如果用户关闭浏览器并重新打开它,它们会被正确记住——只要 ASP 会话没有超时。
Scott Hanselmann 的一篇较早的帖子让我想知道这是否是因为 FormsAuthentication 试图更新身份验证票证,并且可能是在一个不起作用的 OpenId 模型中,但我在 web.config 中设置了 FORMS SlidingExpiration="false" 无论如何我认为强制使用持久 cookie 会使这些东西变得无关紧要。
我还想知道为什么 DotNetOpenId MVC 示例不包含 RememberMe 复选框 - 也许它有些棘手?
另一方面,在 StackOverflow 上,我看到我在会话中被自动记住了。想知道他们是否使用 DotNetOpenId 以外的其他东西来进行 OpenId 身份验证。
还有其他人在 ASP.NET MVC 中使用 DotNetOpenId 成功完成了 RememberMe 吗?有什么技巧吗?
[更新]
感谢您的帮助,安德鲁。原来这与 DotNetOpenId 无关。
读完这篇文章后,我收集到我的托管服务提供商可能会定期回收应用程序池,这导致身份验证票证加密是使用新的机器密钥完成的。
根据前面的链接文章,我在 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" />