我正试图从我的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");*
如果有人有想法帮助我会很乐意尝试。
答案 0 :(得分:1)
两个网站都需要共享相同的machine key。
答案 1 :(得分:0)
Ian是正确的,因为您的网站需要具有匹配的机器密钥。此外,您需要确保您的会员提供商具有相同的设置,尤其是有关密码加密的设置。
另外,为什么要在代码中完全处理这个问题?您应该能够非常轻松地使用两个站点的Web.Config配置此功能。从本质上讲,您正在进行大量的返工并在没有必要的情况下引入潜在的问题区域(除非您有理由在此处未说明)。