跨子域单点登录,为什么上传到服务器上就不行了?

smallfools 2014-10-28 05:25:38
假设有两个站点:book.test.com和vod.test.com,设想在book.test.com网站上登录后,跳转到vod.test.com网站上时不需要再登录。
在本机测试时,修改hosts文件内容如下:
127.0.0.1 book.test.com
127.0.0.1 vod.test.com

具体操作如下:
第一步、修改book网站中的web.config文件如下:

<authentication mode="Forms">
<forms defaultUrl="~/login.aspx" domain=".test.com" slidingExpiration="true"></forms>
</authentication>
<machineKey
validationKey="969CDD5D85E13827ADFF3E80771472F11B3D454930D39DA19399AB714F596CA98B2D10D47E911990E2491211550E42FE676859CD4925F4028076DD6262A62F80"
decryptionKey="5300D71269AC1D709C42E1A96E636EED0ABFF655C05CAEB6C64BA9EAEF9A88C3"
validation="SHA1" decryption="AES" />
<authorization>
<deny users="?"/>
</authorization>
<httpCookies domain=".test.com"/>


第二步、在book网站上添加login.aspx文件,在该文件上直接登录,代码如下:

System.Web.Security.FormsAuthenticationTicket ticket = new System.Web.Security.FormsAuthenticationTicket(1, "UserId", DateTime.Now, DateTime.Now.AddMinutes(30),
false, "teacher");
string EncrTicket = System.Web.Security.FormsAuthentication.Encrypt(ticket);
HttpCookie myCookie = new HttpCookie(System.Web.Security.FormsAuthentication.FormsCookieName, EncrTicket);
System.Web.HttpContext.Current.Response.Cookies.Add(myCookie);


第三步、修改vod网站上的web.config文件,如下:

<authentication mode="Forms">
<forms domain=".test.com" slidingExpiration="true"></forms>
</authentication>
<machineKey
validationKey="969CDD5D85E13827ADFF3E80771472F11B3D454930D39DA19399AB714F596CA98B2D10D47E911990E2491211550E42FE676859CD4925F4028076DD6262A62F80"
decryptionKey="5300D71269AC1D709C42E1A96E636EED0ABFF655C05CAEB6C64BA9EAEF9A88C3"
validation="SHA1" decryption="AES" />
<authorization>
<allow users="?"/>
</authorization>
<httpCookies domain=".test.com"/>


第四步、在vod网站上创建Default.aspx,在代码中判断是否登录,以及输出cookies信息,代码如下:

Label1.Text = "用户是否已经进行了身份验证:" + HttpContext.Current.User.Identity.IsAuthenticated.ToString() + "<br />";
Label1.Text += "一共有" + Request.Cookies.Count.ToString() + "个cookies<br />";
for (int i = 0; i < Request.Cookies.Count; i++)
{
Label1.Text += "Name:" + Request.Cookies[i].Name + "<br />";
Label1.Text += "Value:" + Request.Cookies[i].Value + "<br /><br />";
}


经测试,在本机上运行无误。从book.test.com跳转到vod.test.com网站后,可以看到用户身份已验证。也能输出cookies的内空。

但是,上传到服务器上(book和vod分别为两台不同电脑)之后,从book跳到vod后,页面输出为:
用户是否已经进行了身份验证:False
一共有0个cookies

在chrome浏览器中,按f12可以查看到.test.com域中的cookies,但在vod的网页中获取不到身份验证的cookies。请问这是怎么回事?
...全文
113 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复

62,047

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧