Asp.net encryptedTicket参数的值无效

Asp.net encryptedTicket参数的值无效,asp.net,.net,asp.net-mvc,iis,webforms,Asp.net,.net,Asp.net Mvc,Iis,Webforms,我最近修改了我公司eComm网站的登录名,使其具有“让我登录”功能。主要更改是使表单身份验证cookie对这些用户保持不变 发布更改后,我开始在日志中看到此异常: Invalid value for 'encryptedTicket' parameter at System.Web.Security.FormsAuthentication.Decrypt(String encryptedTicket) 问题似乎是特定于用户代理的。记录错误的唯一用户代理是: Mozilla/5.0(iPad;

我最近修改了我公司eComm网站的登录名,使其具有“让我登录”功能。主要更改是使表单身份验证cookie对这些用户保持不变

发布更改后,我开始在日志中看到此异常:

Invalid value for 'encryptedTicket' parameter
at System.Web.Security.FormsAuthentication.Decrypt(String encryptedTicket)
问题似乎是特定于用户代理的。记录错误的唯一用户代理是:

  • Mozilla/5.0(iPad;U;CPU操作系统4_3_3,如Mac OS X;en-us)AppleWebKit/533.17.9(KHTML,如Gecko)版本/5.0.2 Mobile/8J2 Safari/6533.18.5

  • 电子标签标识符/1.0

我有一台上面列出的配置的iPad。第一次登录尝试有效。但是关闭浏览器并返回站点,从而使用持久cookie,会导致错误

这种行为在不同的环境中也不一致。它在我的本地机器和测试服务器上运行良好,但在生产中失败。这使得故障排除变得困难

其他版本的iOS/Safari可以正常登录

搜索此错误时发现web窗体和更新的浏览器版本存在多个问题。但这似乎与我的设想不一致。我没有看到新浏览器的错误,我的网站是MVC

我找到了一个和我的相似的,但没有答案


有人知道这里发生了什么吗?

如果将无效字符串传递给
System.Web.Security.FormsAuthentication.Decrypt
,就会发生这种情况。最常见的是它试图传入
cookieName
而不是
cookieValue

以下是获取ASPXAUTH cookie值+信息的方法:

string authCookieValue = HttpContext.Request.Cookies[FormsAuthentication.FormsCookieName].Value;
var cookieInfo = System.Web.Security.FormsAuthentication.Decrypt(authCookieValue);

我遇到了同样的问题,这是因为我得到了authCookieValue的null或空值。因此,我的建议是,您必须检查HttpCookie的null,以及它的值,如下所示

HttpCookie authCookie = System.Web.HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName];
        if (authCookie != null)
        {
            //Extract the forms authentication cookie
            if (!string.IsNullOrEmpty(authCookie.Value))
            {
                FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);

                string email = authTicket.UserData;

                // and now process your code as per your condition

            }
        }

这肯定会对您有所帮助。

我发现,由于某些原因,cookie可能会得到不一致的值。在某些情况下,对我们来说,这只是一些用户

我建议在发生argumentexception时让用户注销,这比引发错误要好。它没有解释“为什么”,不是完全令人满意(在某些方面,“记住我”对某些用户不起作用…),但至少它可以保持用户的正常行为

在global.asax中:

 protected void Application_PostAuthenticateRequest(object sender, EventArgs e)
    {
        HttpCookie authCookie = Request.Cookies[FormsAuthentication.FormsCookieName];

        if (authCookie != null)
        {
            try
            {
                var authTicket = FormsAuthentication.Decrypt(authCookie.Value);

                //...
                //setting user properties with cookie...
                //...
            }
            catch (ArgumentException ex)
            {
                FormsAuthentication.SignOut();
                Response.Redirect("/");
            }
        }
    }
甚至不确定是否需要重定向(必须检查)


希望这有帮助

当您尝试反序列化的票证长度太长时,您可能会出现相同的错误

对此有任何进一步的发现吗?您应该记录“encryptedTicket”传递给Decrypt方法的值。我刚刚收到大量错误,但是我的代码实际上和你的代码一样。@Brad Hay你得到的是authCookie和authCookie吗?值为空??因此,您无法从Cookie中获取电子邮件。嗯,我没有进行第二次检查以确保
authCookie.Value
不为空。好电话@Dilip0165@Brad所以,如果您签入其他浏览器,您将获得值。我希望这个答案对你有用。@Brad我的答案对你有用吗?您无法从浏览器的cookie中获得价值。