您的位置:首页 > 编程语言 > ASP

ASP.NET Forms验证 实现子域名(SubDomain)共享登陆下的缺陷

2010-01-18 10:04 585 查看
ASP.NET Forms验证 实现子域名(SubDomain)共享登陆下的缺陷

一、什么是单点登录
   单点登录就是在多个web应用程序中,实现统一登录方式,一但登录了某web应用程序,其它相关联的web应用程

序都无需再次登录,一个地方退出,所有相关联的web应用程序都退出.

二、通过利用ASP.NET Forms验证模式 可以实现子域名(SubDomain)共享登陆下的缺陷

要利用Asp.NET Form验证模式实现 同一主域下不同子域名共享登陆状态需要进行以下配置

配置Web.config

1.把Asp.net的认证模式改为Forms认证模式,domain 要等于你的应用程序对应的域名,例如: .test.cn

<authentication mode="Forms">
<forms name=".ASPNETFORM" domain=".test.cn" loginUrl="/login.aspx" defaultUrl="/default.aspx"

protection="All" timeout="30" path="/" requireSSL="false" slidingExpiration="true"

enableCrossAppRedirects="false" cookieless="UseDeviceProfile" />
</authentication>

2.配置针对存储在cookie中的票据信息进行加密解密的方式

<machineKey

validationKey="CF10047DB84FBA7F418BF30F9697B1D6EDDA3A90837F3C57B336B4016E47986135B31B2432F7CB20A6858DFFB

E4E5ECD1451E17C91830993445D0EA5708BABBD" decryptionKey="5D37DDB652B86956" validation="SHA1"/>

备注:生成machineKey网址
    http://www.aspnetresources.com/tools/keycreator.aspx

登陆创建验证票据

1.应用程序登陆页面(Login.aspx)输入用户名、密码并验证通过后,创建一张加密过的验证票据,并存储在cookie中

//创建验证票
FormsAuthenticationTicket ticket
= new FormsAuthenticationTicket(1, name, DateTime.Now,
DateTime.Now.AddDays(1d), false,
HttpContext.Current.Request.UserHostAddress
);
string authTicket = FormsAuthentication.Encrypt(ticket);
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, authTicket);
cookie.Domain = ConfigurationManager.AppSettings["SSODomain"];
HttpContext.Current.Response.Cookies.Add(cookie);

2.登陆完毕后进入有权限的页面,并可得到验证通过后的ID User.Identity.Name;

if (!User.Identity.IsAuthenticated)
{
//未登录
Response.Redirect("/login.aspx");
}
string name = User.Identity.Name;

3.登出页面,清空用户信息,并销毁票据

HttpContext.Current.Session.Clear();
FormsAuthentication.SignOut();

三、Forms验证 实现子域名(SubDomain)共享登陆下的缺陷

根据以上讲解,均可实现同一主域名下的多个子域名共享登陆状态,但是主域名有所限制,当主域名为1个字母,而后缀为2个字母的域名,不能通过认证,例如:a.cn域名,a.jp域名 均不能实现子域名共享登陆,而其他域名均能实现,例如:a.test.com, a.sina.cn 等,大家亦可通过修改hosts文件试验一下,如有高手知道怎么解决这个问题的,请指教,谢谢!!并附上 Demo程序 ,请大家指教!

PS:因本人公司的域名为p.cn,想通过Form认证的模式实现子域名共享登陆状态,但是死活用不上!~~!!汗,不知道这个算不算微软的Bug。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐