ASP.NET Forms驗證 實現子網域名稱(SubDomain)共用登陸下的缺陷

來源:互聯網
上載者:User
 

一、什麼是單點登入
   單點登入就是在多個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。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.