C/S架構程序多種類服務器之間實現單點登陸

(一)    html

     在項目開發的過程當中,常常會出現這樣的狀況:咱們的產品包括不少,以QQ舉例,如登錄、好友下載、羣下載、網絡硬盤、QQ遊戲、QQ音樂等,總不能要求用戶每次輸入用戶名、密碼吧,爲解決這個問題,高手提出了一個很好的跨平臺、跨應用的身份驗證解決方案,那就是——單點登陸(Single Sign On),簡稱爲 SSO。
1、 什麼是單點登陸(Single Sign On)
單點登陸(SSO,Single Sign-on)是一種方便用戶訪問多個系統的技術,用戶只需在登陸時進行一次註冊,就能夠在多個系統間自由穿梭,沒必要重複輸入用戶名和密碼來肯定身份。
2、如何實現單點登陸(SSO)
一、總體設計思路
首先咱們要明確單點登陸的運行模式,即統一身份驗證,在解決方案中,通常經過認證服務器(LoginServer)實現用戶身份驗證,驗證經過後將自動隨機生成身份驗證票據,並將身份驗證票據發送給用戶,待用戶訪問其餘應用時,只對身份驗證票據進行合法性驗證便可。
二、認證服務器(LoginServer)實現的功能
在解決方案中,LoginServer提供的功能包括用戶名/密碼驗證、身份驗證票據的生成、身份驗證票據的合法性驗證這三個最基本的功能,其餘功能能夠根據用戶的需求,自行擴展。
因爲LoginServer基於網絡通信,使用TCP或UDP協議,因此其自己是跨平臺的,只要各個應用在開發過程當中使用的開發語言支持身份驗證票據驗證,便可調用身份驗證平臺進行相關的操做。
三、身份驗證票據
所謂身份驗證票據就是用戶身份驗證經過後,發給用戶用以標示身份驗證經過的信息。身份驗證票據中能夠加密保存用戶的身份信息或某一特定的驗證信息等,通常使用對稱加密,方便在身份驗證票據合法性的檢查中進行相應的解密。C/S結構的程序,票據保存比較方便,只要其餘應用可以取到就能夠。
四、驗證票據
用戶拿到身份驗證票據後,當登陸B系統時,把這個票據傳給B系統,B系統拿這個票據系統到LoginServer進行認證便可。算法

 

(二)數據庫

     在上面文檔中,初步介紹了S架構程序多種類服務器之間實現單點登陸的流程,但是當用戶量巨大或某項產品的重複登陸頻繁時,這種單點登陸(SSO)實現就出現了瓶頸,以下:
多臺LoginServer服務器之間共享數據比較困難,只能經過共享內存或數據庫共享,很難跨機房部署。
隨着業務量的增長,LoginServer服務的需求量也直線上升,並且出現問題的機率很高,常常形成正經常使用戶的認證失敗。
爲解決上述問題,建議票據的認證有子系統的服務器完成,從而下降出現問題的機率,減小服務器壓力。具體的方法以下:
一、加密身份驗證票據
LoginServer服務器使用對稱加密算法加密身份驗證票據,如RC六、AES和Blowfish等,票據內容包括用戶名、認證時間、IP地址、自定義數據等信息。客戶端登陸後,LoginServer把加密後的密串通知給客戶端。
二、驗證身份票據
其餘系統和LoginServer服務器共享對稱加密算法和密鑰,拿到客戶端的密串後使用相同算法和密鑰解密,而後對比用戶名、認證時間、IP地址、自定義數據等,如相同則容許登陸。
三、安全問題
咱們知道對稱加密算法的破解是有可能的,在算法已知的狀況下,密鑰、明文、密文,三者獲得二者能夠計算出另一個;在上述方法中,明文增長了自定義數據,用戶名、認證時間每一個用戶都不一樣,因此黑客通常沒法取得正常明文;咱們只向客戶端通知密文,因此客戶端應不能經過密文窮舉獲得明文+密鑰,因此沒法破解。
四、源代碼泄露
若是服務器源代碼泄露,則可能泄露加密算法、密鑰、明文等;此時的補救方法是及時更新密鑰、調整自定義數據,全部產品都須要同時更新,明文和密鑰都發生變化,泄露代碼的風險就能夠忽略了。
若是服務器架構足夠智能,則能夠定時更新密鑰和自定義數據,如每月更新一次,則整個實現體系就很是安全了;更新密鑰時切記作好兼容工做,確保更新前用戶取得的身份票據有必定的時間能夠驗證成功。
五、使用範圍
上面這個方法用於本身公司的服務器之間沒有問題,但若是是要登陸其餘合做夥伴的產品,則須要單獨協商加密密鑰和自定義數據便可。安全

 

 

出處:https://www.cnblogs.com/starksoft/p/4809362.html服務器

相關文章
相關標籤/搜索