【问题标题】:RememberMe with DotNetOpenId in ASP.NET MVC在 ASP.NET MVC 中使用 DotNetOpenId 记住我
【发布时间】:2010-10-20 13:58:00
【问题描述】:

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

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

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

An older post 的 Scott Hanselmann 让我想知道这是否是因为 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" />

【问题讨论】:

  • 嗨 Martin,StackOverflow 确实使用了 DotNetOpenId。我认为您的 cookie 会话问题可能与 OpenID 无关,因为我认为 DNOI 没有任何机会干扰您的 cookie,并且它永远不会注销用户。如果我学到任何东西,我会尝试对此进行一些研究并发布答案。
  • 谢谢你。它帮助了我。您应该将您的解决方案作为答案发布,以便对其进行投票并获得“自学”徽章

标签: asp.net-mvc openid dotnetopenauth


【解决方案1】:

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

听起来你是在说,只要 web.config 文件中的超时时间很大,那么一切正常。但是一旦你缩短它,你的持久 cookie 不会超过超时值。这个论坛主题帮助我回答了这个问题: http://forums.asp.net/p/1010241/1347970.aspx#1347970

似乎 web.config 中的超时会影响所有 cookie。它说明身份验证票的持续时间。所有 auth cookie 都有这个“生存时间”超时,无论它们是否“持久”。所以持久性 cookie 和非持久性 cookie 的区别在于前者会在不同的浏览器会话中持续存在,而后者会在浏览器关闭时(提前)死掉。

这有意义吗?

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2011-01-28
      • 2017-06-04
      • 2011-08-02
      • 1970-01-01
      • 1970-01-01
      • 2018-05-13
      • 1970-01-01
      • 2010-10-05
      相关资源
      最近更新 更多