單點登入(SSO)

OneStar發表於2022-05-18

單點登入

單點登入:Single Sign On,簡稱SSO。使用者只要登入一次,就可以訪問所有相關信任應用的資源。企業裡面用的會比較多,有很多內網平臺,但是隻要在一個系統登入就可以。

實現方案

  • 單一域名:可以把 cookie 種在根域名下實現單點登入
  • 多域名:常用 CAS來解決,新增一個認證中心的服務。CAS(Central Authentication Service)是實現SSO單點登入的框架

CAS實現單點登入的流程:

  1. 使用者訪問系統A,判斷未登入,則直接跳到認證中心頁面
  2. 在認證中心頁面輸入賬號,密碼,生成令牌,重定向到 系統A
  3. 在系統A拿到令牌到認證中心去認證,認證通過,則建立對話
  4. 使用者訪問系統B,發現沒有有效會話,則重定向到認證中心
  5. 認證中心發現有全域性會話,新建令牌,重定向到系統B
  6. 在系統B使用令牌去認證中心驗證,驗證成功後,建議系統B的區域性會話。

具體的可以下面的文章,講解的很詳細

關鍵點

下面是舉例來詳細說明CAS實現單點登入的流程:

一、第一次訪問系統A

  1. 使用者訪問系統A (www.app1.com),跳轉認證中心 client(www.sso.com),然後輸入使用者名稱,密碼登入,然後認證中心 serverSSO 把 cookieSSO 種在認證中心的域名下 (www.sso.com),重定向到系統A,並且帶上生成的 ticket 引數 (www.app1.com?ticket =xxx)
  2. 系統A (www.app1.com?ticket =xxx)請求系統A的後端 serverA ,serverA 去 serverSSO 驗證,通過後,將cookieA種在 www.app1.com下

二、第二次訪問系統A
直接攜帶 cookieA 去訪問後端,驗證通過後,即登入成功。

三、第三次訪問系統B

  1. 訪問系統B (www.app2.com),跳轉到認證中心 client(www.sso.com),這個時候會把認證中心的cookieSSO也攜帶上,發現使用者已登入過,則直接重定向到系統B(www.app2.com),並且帶上生成的ticket引數(www.app2.com?ticket =xxx)
  2. 系統B (www.app2.com?ticket =xxx)請求系統B的後端 serverB,serverB 去 serverSSO 驗證,通過後,將cookieB種在www.app2.com下

注意cookie生成時機及種的位置。

  • cookieSSO,SSO域名下的cookie
  • cookieA,系統A域名下的cookie
  • cookieB,系統B域名下的cookie

相關文章