ASP.NET身份验证和提供者

时间:2009-05-08 17:57:53

标签: asp.net authorization sqlmembershipprovider

我正试图从我的localhost上的一个网站导航到我的localhost上的第二个网站。

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

目前我收到此错误: System.Security.Cryptography.CryptographicException:填充无效且无法删除

我已采取的步骤包括:    将元素设置为特定键值    将验证和加密的machineKey属性设置为“3DES”    通过记录验证加密的票证在#2网站中与#1网站中的值相同。


我的代码在这里:

        *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");*

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

2 个答案:

答案 0 :(得分:1)

两个网站都需要共享相同的machine key

答案 1 :(得分:0)

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

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