java token生成和驗證 token和session區(qū)別?
token和session區(qū)別?注銷是指客戶端的主動注銷。很容易想到一個解決方案:在客戶機成功登錄之后,服務(wù)器將sessionid分配給它,客戶機每次請求資源時都會帶上sessionid。服務(wù)器決定用
token和session區(qū)別?
注銷是指客戶端的主動注銷。很容易想到一個解決方案:在客戶機成功登錄之后,服務(wù)器將sessionid分配給它,客戶機每次請求資源時都會帶上sessionid。
服務(wù)器決定用戶是否登錄,這完全取決于sessionid。一旦被截獲,黑客就可以模擬用戶的請求。因此我們需要引入Token的概念:用戶成功登錄后,服務(wù)器不僅要分配sessionid,還要分配Token,Token是維護登錄狀態(tài)的關(guān)鍵秘密數(shù)據(jù)。從服務(wù)器發(fā)送到客戶端的令牌數(shù)據(jù)也需要加密。因此,登錄的詳細(xì)信息將再次展開。
客戶端首次向服務(wù)器發(fā)起登錄請求(不傳輸用戶名和密碼)。
服務(wù)器使用RSA算法生成一對公鑰和私鑰。保留私鑰,并將公鑰發(fā)送給客戶端。
客戶端收到公鑰后,對用戶密碼進行加密,并將用戶名和加密后的用戶密碼發(fā)送給服務(wù)器,同時生成一對公鑰和私鑰,保留私鑰并將公鑰發(fā)送給服務(wù)器,第二次登錄請求發(fā)送用戶名,客戶端生成的加密密碼和公鑰。
服務(wù)器使用保留的私鑰解密密文并獲取真實密碼。判斷用戶可以登錄后,生成sessionid和token,并使用客戶端發(fā)送的公鑰對token進行加密。最后,會話ID和加密令牌返回給客戶機。
客戶端使用自己生成的私鑰來解密令牌密文并獲得真正的令牌。
Php用戶登陸后的token一般怎么生成的?app端?
這需要由PHP后端生成。登錄成功后,后端通過算法將一些信息組合成令牌,并返回給應(yīng)用端,應(yīng)用端接收并保存。
可以盡可能多地還原和解析此令牌