登出是指客戶端主動退出登入狀態。容易想到的方案是,客戶端登入成功後, 伺服器為其分配sessionId, 客戶端隨後每次請求資源時都帶上sessionId。
伺服器判斷使用者是否登入, 完全依賴於sessionId, 一旦其被截獲, 駭客就能夠模擬出使用者的請求。於是我們需要引入token的概念: 使用者登入成功後, 伺服器不但為其分配了sessionId, 還分配了token, token是維持登入狀態的關鍵秘密資料。在伺服器向客戶端傳送的token資料,也需要加密。於是一次登入的細節再次擴充套件。
客戶端向伺服器第一次發起登入請求(不傳輸使用者名稱和密碼)。
伺服器利用RSA演算法產生一對公鑰和私鑰。並保留私鑰, 將公鑰傳送給客戶端。
客戶端收到公鑰後, 加密使用者密碼,向伺服器傳送使用者名稱和加密後的使用者密碼; 同時另外產生一對公鑰和私鑰,自己保留私鑰, 向伺服器傳送公鑰; 於是第二次登入請求傳輸了使用者名稱和加密後的密碼以及客戶端生成的公鑰。
伺服器利用保留的私鑰對密文進行解密,得到真正的密碼。 經過判斷, 確定使用者可以登入後,生成sessionId和token, 同時利用客戶端傳送的公鑰,對token進行加密。最後將sessionId和加密後的token返還給客戶端。
客戶端利用自己生成的私鑰對token密文解密, 得到真正的token。
登出是指客戶端主動退出登入狀態。容易想到的方案是,客戶端登入成功後, 伺服器為其分配sessionId, 客戶端隨後每次請求資源時都帶上sessionId。
伺服器判斷使用者是否登入, 完全依賴於sessionId, 一旦其被截獲, 駭客就能夠模擬出使用者的請求。於是我們需要引入token的概念: 使用者登入成功後, 伺服器不但為其分配了sessionId, 還分配了token, token是維持登入狀態的關鍵秘密資料。在伺服器向客戶端傳送的token資料,也需要加密。於是一次登入的細節再次擴充套件。
客戶端向伺服器第一次發起登入請求(不傳輸使用者名稱和密碼)。
伺服器利用RSA演算法產生一對公鑰和私鑰。並保留私鑰, 將公鑰傳送給客戶端。
客戶端收到公鑰後, 加密使用者密碼,向伺服器傳送使用者名稱和加密後的使用者密碼; 同時另外產生一對公鑰和私鑰,自己保留私鑰, 向伺服器傳送公鑰; 於是第二次登入請求傳輸了使用者名稱和加密後的密碼以及客戶端生成的公鑰。
伺服器利用保留的私鑰對密文進行解密,得到真正的密碼。 經過判斷, 確定使用者可以登入後,生成sessionId和token, 同時利用客戶端傳送的公鑰,對token進行加密。最後將sessionId和加密後的token返還給客戶端。
客戶端利用自己生成的私鑰對token密文解密, 得到真正的token。