zoukankan      html  css  js  c++  java
  • 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。


     


    作者:水木    
     
  • 相关阅读:
    linux上配置apache实现二级域名访问目录
    C++数组的使用
    linux 上安装C++编译环境
    qt下qmake:提示could not exec '/usr/lib/x86_64-linux-gnu/qt4/bin/qmake': No such file or directory
    Qt4.8.5移植
    oracle使用已有vid快速新建虚拟机
    各种编程语言鸡汤网站
    linux下 git使用小记下
    CodeForces-650B Image Preview 二分+模拟
    HDU-6351 Beautiful Now 全排列暴力
  • 原文地址:https://www.cnblogs.com/hsapphire/p/1650372.html
Copyright © 2011-2022 走看看