1. 程式人生 > >單點登入和第三方登入的實現原理

單點登入和第三方登入的實現原理

單點登入:
      我們的單點登入系統,主要包含了登入驗證,token校驗 、登出、註冊幾大功能,單點登入系統提供了統一的登入和註冊頁面,提供了統一的登入token校驗介面。單點登入的主要原理就是在登入成功以後,生成一個令牌,這個領跑要求每次登入唯一不可重複,我們就簡單的用料一個隨機的UUID,因為我們的系統在部署時,各個模組搜尋通過nginx對映到痛同一個一級域名下的,cookie只要把他的作用域設定成一級域名,就可以在所有同一個一級以及域名下的模組中共享,所以我們把隨機生成的token,以字串“token”為key,放在cookie裡邊,然後用生成的token做key,使用者物件資訊轉換成json字串後,作為value,放到redis裡邊,都設定有效期30分鐘;截到統一的登入頁面,並把進入攔截到的URL放入cookie裡邊,方便登入成功以後,獲取這個URL,進行原路徑跳轉,而不是每次登入都進入首頁,提供用於的體驗度。如果返回使用者資訊,則說明已經登入,模組建立的session,並放行url。統一校驗token的介面的主要流程是,首先從cookie新設定一遍(這個是為了重新整理有效期);這樣就實現了多個模組只需要登入一次就可以的流程,還有就是登出,登出也是呼叫統一的登出介面,登出是需要首先從cookie中獲取token,根據token刪除redis中的使用者資訊,然後在刪除cookie中的token。

第三方登入:
    第三方登入,我的理解就是基於使用者在第三方平臺上已有的賬號和密碼來快速完成己方應用的登入或者註冊的功能,遵循一個Oauth2.0國際通用協議,允許使用者在不提供使用者名稱和密碼的情況下,讓第三方應用訪問一些資源。使用第三方登入時,我們不需要使用者再次輸入使用者名稱和密碼,而是通過一個唯一的openID來進行授權登入,對於普通使用者來說,如果能用QQ、微信、百度、新浪這些平臺的賬號一鍵註冊登入各個平臺,無疑會方便很多。對於我們的應用來說,通過授權,藉助QQ,微信這些使用者量比較大的第三方平臺增強自己的知名度也是非常划算。我們的平臺集成了,QQ,微信,百度,新浪四種第三方登入方式,實現的方式都是類似的。首先去各大開放平臺進行註冊成為開發者,並建立應用,填寫回調地址,獲取APPID(應用唯一的識別標誌)、appkey(給應用分配的祕鑰)、(名稱可能不一樣);下載api文件和sdk開發工具包;就可以開始發了。首先在我們網站的登入頁面根據api整合第三方登入的logo圖示。並給點選事件,當用戶點選此圖示時,傳送請求,直接跳轉到第三方平臺的登入頁面,第三方平臺也會自動檢測電腦是否有已登入的賬號,登陸成功以後,第三方平臺會自動呼叫我們傳遞的回撥地址,並傳遞會一個code引數,我們拿到code以後,再次呼叫第三方api提供的介面,傳入code,app_id、appkey等引數,呼叫獲取access_token的介面(介面呼叫,有第三方提供的sdk包,直接匯入jar包,根據api文件,傳遞引數呼叫方法,我們沒必要太過關心第三方平臺是用webservice介面或httpclient介面)。獲取到access_token同時,會獲取到openID,拿到openID以後就相當於拿到了登入授權。用openID去自己的使用者表中查詢是否與對應的使用者,如果有,就直接查出使用者資訊,建立自己的session就可以了,如果沒有,則新建立一個使用者,吧openID放進去。如果還需要其他資訊,可以通過openID再次呼叫第三方平臺的介面獲取使用者資訊,如果使用者資訊還是不夠,可以建立完使用者以後再次跳轉一個頁面,讓使用者不全資訊。資訊不全以後,建立session,完成登入,這樣一個第三方登入幾句完成了。
--------------------- 
作者:TMFRenWei 
來源:CSDN 
原文:https://blog.csdn.net/qq_42434712/article/details/81742335