1

我正在尝试从本地主机上的一个网站导航到本地主机上的第二个网站。

这两个网站都有自己的会员提供商。我正在尝试使用来自站点 #1 的 FormsAuthorizationTicket 将用户 SSO 到站点 #2。

目前我收到此错误: System.Security.Cryptography.CryptographicException: Padding is invalid and cannot be removed

到目前为止,我采取的步骤包括: 将元素设置为特定的密钥值 将验证和加密的 machineKey 属性设置为“3DES” 通过记录验证加密票证在 #2 网站中的值与在排名第一的网站。


我的代码在这里:

        *FormsAuthentication.Initialize();
        FormsAuthenticationTicket newTicket = new 
            FormsAuthenticationTicket(1 // Ticket Version
            , Login1.UserName                       // User Name
            , DateTime.Now                          // Creation Date
            , DateTime.Now.AddDays(1)   // Expiration Date
            , true                                              // Is Persistant
            , Login1.UserName);                 // This should be a list of Roles


        string strEncyptedTicket = FormsAuthentication.Encrypt(newTicket);
        HttpCookie myCookie = new HttpCookie("cryptCookie", strEncyptedTicket);
        myCookie.Values.Add("username", Login1.UserName);
        myCookie.Values.Add("cryptTick", strEncyptedTicket);
        Response.Cookies.Add(myCookie);*

在网站 #2 中,我创建了一个登录页面来验证票证并重定向到仅限会员的页面。解密期间是我收到上面指定的错误。

这是我在网站 #2 上的着陆页代码:


        *FormsAuthenticationTicket fat2 = FormsAuthentication.Decrypt(Request.Cookies["cryptCookie"].Values["cryptTick"]);


        MembershipUser mu = Membership.GetUser(Request.Cookies["cryptCookie"].Values["username"]);
        if (mu == null)
        {
            lblInfo.Text += "member not found";
            return;
        }

        Response.Redirect(@"~\MemberPages\MemberPage.aspx");*

如果有人有帮助的想法,我会很乐意尝试。

4

2 回答 2

1

两个站点需要共享相同的机器密钥

于 2009-05-08T18:13:41.307 回答
0

Ian 是正确的,因为您的站点需要有匹配的机器密钥。此外,您需要确保您的会员提供商具有相同的设置,尤其是在密码加密方面。

另外,你为什么要在代码中完全处理这个?您应该能够使用两个站点的 Web.Config 非常轻松地配置此功能。从本质上讲,您正在做大量的返工并在不必要的地方引入潜在的问题区域(除非您有理由在此处未说明)。

于 2009-05-08T18:21:01.710 回答