單點登入的一些實現

來源:互聯網
上載者:User

首先單點登入一定是要依賴用戶端的,也就是用戶端必須返回給伺服器標識,這是原則

那麼,單點登入基礎的解決方案就剩下了三個基本的

1.Session

2.Cookies

3.URL

因為用戶端只能儲存這三種基礎資訊

 

1.Session,session是依賴於用戶端的sessionID的而sessionID是存在Cookies或者URL中的,sessionID系統產生的原理 只要Request.Url.Host不同,sessionID就會重建Request.Url.Host相同的話sessionID是不變的,或者重新開啟一個瀏覽器,sessionID也會重建,所以因為sessionID產生的原理,很難用session做SSO,如果想用session做SSO的話,也可以,思路是這樣的,重寫SessionID,然後每個使用者登入後產生的SessionID固定,然後SessionID資訊存在資料庫中,系統跳轉的時候去資料庫驗證sessionID,取出使用者資訊,這個優點是可以跨主域做單點登入。缺點是sessionID固定,安全性非常差

 

    public class SessionIdOverride : System.Web.SessionState.SessionIDManager
    {

        public SessionIdOverride()
        {
            //
            // TODO: Add constructor logic here
            //
        }
        public override string CreateSessionID(HttpContext context)
        {
            string sessionString = Guid.NewGuid().ToString() + context.Request.UserHostAddress;
            return sessionString ;
        }

        /// <summary>
        /// Gets a value indicating whether a session identifier is valid.
        /// </summary>
        /// <param name="id">The session identifier to validate.</param>
        /// <returns>
        /// true if the session identifier is valid; otherwise, false.
        /// </returns>
        public override bool Validate(string id)
        {
            try
            {
                Guid testGuid = new Guid(id);

                if (id == testGuid.ToString())
                    return true;
            }
            catch
            {
            }
            return true;
        }
    }

 

 

 

2.Cookies用cookies

在Cookie規範上說,一個cookie只能用於一個網域名稱,不能夠發給其它的網域名稱.但是可以在主網域名稱相同的情況下,次層網域可以共用Cookies

 

簡單代碼如下:———————————————————————————————————
更新cooikes
//如果存在cookie,則更新value屬性;否則,new一個cookie。
HttpCookie cookies = Request.Cookies["userName"];
if (cookies == null)
{
cookies = new HttpCookie("userName", this.txtUserName.Text);
cookies.Domain = "Common.com";
Response.Cookies.Set(cookies);
}
else
{
cookies.Value = this.txtUserName.Text;
cookies.Domain = "Common.com";
Response.Cookies.Set(cookies);
cookies = new HttpCookie("userName", this.txtUserName.Text);

}
讀出COOKIES
HttpCookie cookies = Request.Cookies["userName"];
if (cookies != null)
{

this.TextBox1.Text = cookies.Value;
}
查看所有的COOKIES
HttpCookieCollection cookies;
HttpCookie oneCookie;
cookies = Request.Cookies;
string[] cookieArray = cookies.AllKeys;
for (int i = 0; i < cookieArray.Length; i++)
{

oneCookie = cookies[cookieArray[i]];

Response.Write(oneCookie.Name + " - " + oneCookie.Value);
}

 

將   Cookie   的有效範圍限制到域  
  預設情況下,Cookie   與特定的域相關聯。例如,如果您的網站是   www.contoso.com,那麼當使用者向該網站請求頁面時,您編寫的   Cookie   就被發送到伺服器。(有特定路徑值的   Cookie   除外,我在上一節剛剛解釋過。)   如果您的網站有子域(例如   contoso.com、sales.contoso.com   和   support.contoso.com),就可以把   Cookie   同特定的子域相關聯。為此,需要設定   Cookie   的   Domain   屬性,如下所示:  
   
  Response.Cookies("domain").Value   =   DateTime.Now.ToString  
  Response.Cookies("domain").Expires   =   DateTime.Now.AddDays(1)  
  Response.Cookies("domain").Domain   =   "support.contoso.com"  
   
  如果按照這種方式設定域,則   Cookie   只能用於指定子域中的頁面。  
   
  您也可以利用   Domain   屬性來建立可在多個子域中共用的   Cookie。例如,對域進行如下設定:  
   
  Response.Cookies("domain").Value   =   DateTime.Now.ToString  
  Response.Cookies("domain").Expires   =   DateTime.Now.AddDays(1)  通用型cookies ,如果不加只在當前開的瀏覽器及子頁面有效,關閉或新開都失效
  Response.Cookies("domain").Domain   =   "contoso.com"  
   
  這樣,該   Cookie   就可用於主域、sales.contoso.com   和   support.contoso.com。  

 註:考慮到安全性,Cookies必須加密,最好序列化加密

3.URL,URL的原理很簡單,當跳轉系統時,隨機產生登入使用者的URL,然後把URL對應的使用者資訊存到資料庫中(或其它),跳到其它系統再根據URL取出來,然後把這個資訊作廢,實際仔細一想,和session的原理是一樣的,就是麻煩些,不過這個更安全

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.