[原創]多網站單點登入(SSO)設計

來源:互聯網
上載者:User

這是一個老話題了,當前各門戶一般也都實現了多個業務之間的單點登入。下面根據我經曆過的項目,談一下我自己的看法。

 

為什麼需要單點登入:

 產品剛上線時,一般由於使用者量少,所有的功能都放在一起,一般也不需要具體的單點登入。隨著使用者量和業務發展的需要,要求逐步將產品按功能或效能分為相應獨立的網站,並分開部署,這就需要在各個網站之間進行單點登入,以達到使用者一次登入,就可以使用多個網站。

 

單點登入的實現:

簡單方法: 在同一個域內的網站,可以簡單的通過共用Cookie(將登入使用者名稱存放Cookie中)來實現單點登入。這種方法實現簡單,安全性方法可以通過將Cookie值加密方式加強,但對不同域下及不同開發語言下(如A網站C#,B網站C)實現麻煩。

 

推薦方法:建立統一的認證中心,認證中心提供:

  1、使用者登入認證(認證使用者名稱和密碼),如果成功,返回表示本次登入的登入Token

  2、登入Token認證(認證Token是否正確),如果成功,返回當前登入的使用者名稱

  3、延長Token有效期間

  4、退出(使Token失效)

認證中心獨立於各個網站,單點流程一般情境如下:

  1、使用者在網站A輸入使用者名稱和密碼點擊登入

  2、網站A將使用者名稱和密碼轉寄給認證中心進行認證,認證中心返回Token

  3、網站A將當前登入使用者和Token存入Session(或Cookie)

  4、在網站A上點擊串連訪問網站B,通過URL參數方式,將Token帶給網站B

  5、網站B將Token轉交到認證中心,認證正確,返回目前使用者名。

  6、網站B將當前登入使用者和Token存入Session(或Cookie),完成登入流程

 這樣的設計下的Token,還可以用在非同步使用Ajax去訪問伺服器端的介面(介面可能獨立部署在不同的網站下),這樣只需要帶上Token,伺服器端的介面認證Token通過後,直接返回這個登入使用者的相應使用者資訊。

 

 安全性考慮:

   1、使用者登入認證介面,可增加認證頻率、認證IP等限制,防止暴力密碼破解攻擊

  2、Token其實就是一串表示本次登入的唯一字串,可以產生字串時,增加摘要資訊。如Token的組成為:A+MD5(A+PWD) 的方式,A為隨機產生的GUID,這樣在驗證Token時,就可以直接通過演算法來驗證合法性,只有演算法驗證通過後,再進行下一步的操作。

 

以上只是從整體上描述統一認證的設計,中間還有很多細節沒有描述出來,需要瞭解的我們可進一步討論。

 下一篇,準備寫一下認證中心內部,如何?分布式認證系統,支援高並發、防攻擊等方面內容。

------------------------

轉寄請保留出處。謝謝

 

 


 

聯繫我們

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