【问题标题】:ASP.NET Forms Authentication failed for the request. Reason: The ticket supplied has expired请求的 ASP.NET 表单身份验证失败。原因:提供的票已过期
【发布时间】:2011-07-13 02:25:56
【问题描述】:

我在事件日志中多次收到此错误并且用户已注销。

事件代码:4005
事件消息:请求的表单身份验证失败。原因:提供的票已过期。
活动时间:2011 年 3 月 10 日下午 3:35:22
活动时间 (UTC):2011 年 3 月 10 日晚上 8:35:22
事件 ID:fc2f70cc85014b0ca7dbb01471617b66
事件顺序:3392
事件发生:1
事件详情代码:50202

想法:

  • 我没有使用 Web 表单。
  • 我不认为应用程序池正在回收。
  • 我比较了几个事件中的进程 ID,它是相等的。
  • 我的机器密钥不是自动生成的。

【问题讨论】:

标签: asp.net .net authentication forms-authentication


【解决方案1】:

听起来像是表单身份验证票已过期时会出现的错误。您的票的超时期限是多少?它设置为滑动到期还是绝对到期?

我相信超时的默认值是 20 分钟,并且可以滑动到期,因此如果用户通过身份验证并且在某个时间点没有在 20 分钟内访问您的网站,他们的票就会过期。如果设置为绝对过期,它将在发出 X 分钟后过期,其中 X 是您的超时设置。

您可以在web/machine.config 下的/configuration/system.web/authentication/forms 下设置超时和过期策略(例如滑动、绝对)

【讨论】:

  • 超时设置为 40。我们看到的问题是最快 1 分钟。
【解决方案2】:

正如斯科特在这里提到的http://weblogs.asp.net/scottgu/archive/2010/09/30/asp-net-security-fix-now-on-windows-update.aspx windows为.net框架安装安全更新后,你会遇到这个问题。 只需修改 web.config 文件中的配置部分并切换到不同的 cookie 名称。

【讨论】:

  • 我更改了 cookie 名称...它解决了我的问题。
  • @contactmatt 许多用户向我表示,他们在设置为 30 分钟的身份验证超时之前很快就退出了。我检查了事件日志,发现应用程序池没有被回收,但有你多次提到的错误。我的服务器管理员最近安装了更新,其中包括与此答案中提到的内容相关的更新。你能告诉我你是否只对那些使用持久性 cookie 的用户有问题,或者所有用户都面临问题,因为我们没有持久性表单身份验证选项。
  • 对我来说这是解决方案。对于想知道如何设置 cookie 名称的人,请在此处查看答案stackoverflow.com/a/6661964/2135719
【解决方案3】:

这是一篇来自 Microsoft http://www.iis.net/learn/troubleshoot/security-issues/troubleshooting-forms-authentication 的好文章,涵盖了各种案例和场景。

【讨论】:

    【解决方案4】:

    在使用另一台机器上的 web.config 后,我遇到了同样的问题。该问题与无效的MachineKey 有关。为了解决这个问题,我修改了 web.config 以使用我服务器的正确 MachineKey

    这个MSDN blog post 展示了如何生成机器密钥。

    【讨论】:

      【解决方案5】:

      我遇到了同样的错误,在我们的例子中,它是由负载平衡器引起的。我们必须确保将持久性设置为源 IP。否则登录表单由一台服务器打开,并由另一台服务器处理,这将无法正确设置身份验证 cookie。也许这对其他人有帮助

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-10-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-16
        • 2016-09-27
        • 1970-01-01
        相关资源
        最近更新 更多