【问题标题】:Invalid value for encryptedTicket parameterencryptedTicket 参数的值无效
【发布时间】:2013-09-24 14:25:12
【问题描述】:

我最近修改了我公司 eComm 网站的登录信息,使其具有“保持登录状态”功能。主要的变化是使这些用户的表单身份验证 cookie 持久化。

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

Invalid value for 'encryptedTicket' parameter
at System.Web.Security.FormsAuthentication.Decrypt(String encryptedTicket)

问题似乎是特定于用户代理的。记录错误的唯一用户代理是:

  • Mozilla/5.0 (iPad; U; CPU OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5

  • eTailInsights 标签标识符/1.0

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

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

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

搜索此错误时发现多个references 与网络表单和较新的浏览器版本有关。不过,这似乎与我的情况不一致。我没有看到新浏览器的错误,我的网站是 MVC。

我找到了一个与我相似的question,但没有答案。

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

【问题讨论】:

  • 对此还有什么进一步的发现吗?
  • 您应该记录传递给 Decrypt 方法的“encryptedTicket”值。

标签: asp.net .net asp.net-mvc iis webforms


【解决方案1】:

我遇到了同样的问题,这是因为我得到了 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

            }
        }

这肯定会对你有所帮助。

【讨论】:

  • 我刚刚收到大量这些错误,但我的代码与您的几乎相同。
  • @Brad Hay 你得到 authCookie 并且 authCookie.Value 为空?所以您无法从您的 cookie 中收到电子邮件。
  • 嗯,我没有进行第二次检查以确保 authCookie.Value 不为空。好电话,@Dilip0165
  • @Brad 因此,如果您在其他浏览器中签入,您将获得价值。我希望这个答案对你有用。
  • @Brad 我的回答对你有用吗?您没有从浏览器的 cookie 中获得价值。
【解决方案2】:

当您尝试反序列化的票证的长度太长时,您可能会遇到同样的错误。

【讨论】:

    【解决方案3】:

    如果您将无效字符串传递给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);
    

    【讨论】:

      【解决方案4】:

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

      比引发错误更好,我只是建议在出现参数异常时将用户注销。它没有解释“为什么”,并不完全令人满意(在某些方面,“记住我”对某些用户不起作用......)但至少它可以保持用户的正常行为。

      在 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("/");
                  }
              }
          }
      

      甚至不确定是否需要重定向(必须检查)。

      希望对你有帮助

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-06
        • 1970-01-01
        • 1970-01-01
        • 2015-04-29
        • 1970-01-01
        相关资源
        最近更新 更多