單點登入
單點登入:Single Sign On,簡稱SSO。使用者只要登入一次,就可以訪問所有相關信任應用的資源。企業裡面用的會比較多,有很多內網平臺,但是隻要在一個系統登入就可以。
實現方案
- 單一域名:可以把 cookie 種在根域名下實現單點登入
- 多域名:常用 CAS來解決,新增一個認證中心的服務。CAS(Central Authentication Service)是實現SSO單點登入的框架
CAS實現單點登入的流程:
- 使用者訪問系統A,判斷未登入,則直接跳到認證中心頁面
- 在認證中心頁面輸入賬號,密碼,生成令牌,重定向到 系統A
- 在系統A拿到令牌到認證中心去認證,認證通過,則建立對話
- 使用者訪問系統B,發現沒有有效會話,則重定向到認證中心
- 認證中心發現有全域性會話,新建令牌,重定向到系統B
- 在系統B使用令牌去認證中心驗證,驗證成功後,建議系統B的區域性會話。
具體的可以下面的文章,講解的很詳細
關鍵點
下面是舉例來詳細說明CAS實現單點登入的流程:
一、第一次訪問系統A
- 使用者訪問系統A (www.app1.com),跳轉認證中心 client(www.sso.com),然後輸入使用者名稱,密碼登入,然後認證中心 serverSSO 把 cookieSSO 種在認證中心的域名下 (www.sso.com),重定向到系統A,並且帶上生成的 ticket 引數 (www.app1.com?ticket =xxx)
- 系統A (www.app1.com?ticket =xxx)請求系統A的後端 serverA ,serverA 去 serverSSO 驗證,通過後,將cookieA種在 www.app1.com下
二、第二次訪問系統A
直接攜帶 cookieA 去訪問後端,驗證通過後,即登入成功。
三、第三次訪問系統B
- 訪問系統B (www.app2.com),跳轉到認證中心 client(www.sso.com),這個時候會把認證中心的cookieSSO也攜帶上,發現使用者已登入過,則直接重定向到系統B(www.app2.com),並且帶上生成的ticket引數(www.app2.com?ticket =xxx)
- 系統B (www.app2.com?ticket =xxx)請求系統B的後端 serverB,serverB 去 serverSSO 驗證,通過後,將cookieB種在www.app2.com下
注意cookie生成時機及種的位置。
- cookieSSO,SSO域名下的cookie
- cookieA,系統A域名下的cookie
- cookieB,系統B域名下的cookie