表单身份验证:确定票证无效的原因

Forms Authentication: Determine why ticket is invalid

我有一个使用表单身份验证的 Web 应用程序。该应用程序是 MVC,还有一个部分用于来自我们的移动应用程序的请求。客户端的移动应用程序有一段时间未使用,然后又回来了,现在我看到这个登录事件视图:

事件代码:4005 事件消息:请求的表单身份验证失败。原因:提供的票证无效。

我还在 IIS 中记录 cookie,发现 ASPXAUTH 看起来正确并且在第一个请求时出现。然后,在 Authorize 属性中,它重定向到登录页面并生成该错误消息。

我遇到的问题是我们无法让客户端通过登录移动应用程序重新进行身份验证,因为这会导致数据丢失,这在我们的案例中不是一个选项。

所以我的问题是,有没有办法确定它无效的原因。例如,过期的令牌、无效的令牌等?我问是因为我已经研究过,并且根据不同的原因有不同的方法来解决这个问题。比如机键问题等等...

其他详情: IIS 上的机器密钥:在运行时自动生成,并且由应用程序唯一。 AutoGenerate,输入 IsolateApps 用于验证和解密。

最初生成时,FormsAuthenticationTicket 过期设置为 int.MaxValue。

很难重现。我最初有一段时间无法重现这一点。昨晚它似乎是随机发生的,所以现在我有一个移动应用程序卡住了,无法测试这个无效的票证错误。

我看过这个post: ASP.NET Forms Authentication failed for the request. Reason: The ticket supplied has expired

感谢任何帮助。 谢谢,

Machine Key on IIS: Automatically generates at runtime

大概是这个原因。如果您的机器密钥不是静态的,那么每次您的应用程序池被回收时它都会重新生成。一旦发生这种情况,它将使您现有的所有登录无效。