1. 程式人生 > >.Net 單點登入(SSO)的原理與實現------單點登入是什麼鬼

.Net 單點登入(SSO)的原理與實現------單點登入是什麼鬼

.Net 單點登入(SSO)的原理與實現——單點登入是什麼鬼

一、什麼是單點登入

  在一些公司中,可能需要按照公司業務將系統拆分,例如騰訊的產品有騰訊視訊、QQ郵箱、QQ空間等;百度有百度貼吧,百度知道;阿里有淘寶、天貓….我們常常是登入了淘寶就可以直接進天貓,退出登入後天貓和淘寶也都退出登入了。所以,單點登入簡單來說就是:
一處登入、處處登入,一處登出、處處登出

二、單點登入的使用場景

  上面我有提到,單點登入是一處登入,處處登入,一處登出,處處登出,因此單點登入適用於多系統之間共享使用者資訊,共享使用者的身份認證資訊場景。如果多系統之間的使用者資訊不是一致的,那麼單點登入則不適用!

三、先不談單點登入

  我們先不談單點登入,我們來談談一般的登入。對於一般的登入,無非就是想進入一個系統得登入一下,在登入介面輸入使用者名稱或郵箱手機號之類的,再輸入密碼,如果登入失敗則提示失敗,如果成功則進入系統。因此流程如下:
這裡寫圖片描述
那麼,我們進行一下思考:登入是什麼?
在我看來,登入就是一個驗證(廢話),你給我一個憑據,我驗證你能不能“看一些東西,做一些事”!
對於獨立系統,每個系統都有各自的驗證,各自驗證各自的憑據,驗證完“看一些東西,做一些事”!

四、使用者驗證與登入認證

   既然各自的系統都有各自的驗證,如果這些系統都共享一個驗證邏輯,不就可以單點登入了嗎?事實證明,我們想的太簡單了!
   是的,驗證邏輯是必須要相同的,假設A系統使用使用者名稱123密碼123可以登入,那麼B系統用這個使用者名稱密碼也一定要可以登入。但這僅僅是驗證

邏輯,並不是系統的認證邏輯,我們要理清驗證與認證的區別。所謂驗證,無非就是驗證憑據是否有效,例如使用者是否存在,密碼是否正確。而登入認證,是認證你是否已經登入。二者的區別一目瞭然,或許你已經有了使用者名稱密碼,你可以登入說明你可以通過校驗(也就是驗證),但是你沒有進行登入認證的話你依然是不能訪問受限內容的。因此要實現單點登入我們要解決三大問題:

  • 同步驗證
  • 同步認證
  • 同步登出

第一個問題好解決,我們只需要使用相同的驗證邏輯就行,第二和第三個問題正是單點登入要解決的核心之所在!

五、單點登入是一種架構,與語言無關

   到目前為止,我們還沒有提到程式語言,實際上,只要解決了上面我說的三大問題,就可以實現最基本的單點登入,因此單點登入是一種解決這三大問題的架構,任何程式語言都可以實現這種架構,因此它與語言無關!但是為什麼這篇部落格的標題是“.Net 單點登入(SSO)的原理和實現呢”?原因有二:

  • 因為博主是一個.Net開發者,故以.Net為例子,深入淺出講解單點登入原理以及用.Net技術的實現
  • 在現在的網路資源裡,單點登入框架和解決方案有很多,但大部分都不是基於.Net技術來實現的,因此需要一個基於.Net單點登入解決方案

總結:剖析單點登入要解決的需求之所在,找到解決單點登入問題的癥結是解決問題的大前提!