app與php后台接口登錄認證、驗證(seesion和token)


jwt驗證token

JWT 除了前兩段 header, payload 之外, 還有第三段: 簽名服務端簽發 JWT 時, 會用自己的密鑰(對稱 /非對稱皆可)生成一個簽名, 收到 token 時只需要驗簽通過即認為合法, 而驗簽是一個無狀態的過程.

一、登錄機制

登錄可分為三個階段(登錄驗證、登錄持續、退出登錄);登錄驗證指客戶端提供賬號/密碼(或第三方平台(微信、qq)獲取openid/unionid)向服務器提出登錄請求,服務器應答請求判斷能否登錄並返回相應數據;登錄持續指客戶端登錄后, 服務器能夠分辨出已登錄的客戶端,並為其持續提供登錄權限的服務器。退出登錄指客戶端退出登錄狀態。方案,客戶端登錄成功后, 服務器為其分配seesionId和token, 客戶端每次請求資源時都帶上sessionId和token驗證,當sessionId失效帶上token重新獲取sessionId從而獲取相應資源;

1.1 登錄狀態seesionId

登錄狀態指,客戶端登錄情況(登錄中,未登錄);簡單登錄流程如下:

  • 客戶端向服務器第一次發起登錄請求(不傳輸用戶名和密碼)。
  • 服務器利用RSA算法產生一對公鑰和私鑰。並保留私鑰, 將公鑰發送給客戶端。
  • 客戶端收到公鑰后, 加密用戶密碼, 向服務器發起第二次登錄請求(傳輸用戶名和加密后的密碼)。
  • 服務器利用保留的私鑰對密文進行解密,得到真正的密碼。
    登錄成功后,服務器在session中分配一個Id記錄客戶端訪問狀態;

1.2 身份驗證token

token就是令牌,最大的特點就是隨機性,不可預測;從上面流程可知,單單一個sessionId判斷用戶的登錄狀態及身份並不可取;為此需要token進行身份審核;並且token存活時間應比sessionId長;因為sessionId一旦實效,就可以通過token來保持登錄狀態;

二、用戶登錄

2.1 登錄驗證

app登錄方式如開頭所說,主流三種:微信、QQ、賬號/密碼;首次驗證是通過數據的匹配;匹配成功服務器返回唯一的sessionId和token,防止用戶信息的泄露;期間,建議token存活時間應比sessionId長;因為sessionId一旦實效,就可以通過token來維持登錄狀態;

2.2 登錄持續

sessionId記錄着客戶端登錄狀態,保存在服務器session中;可想而知當session過了存活期時就會失效,通過token重新獲取sessionId;保證登錄狀態的延續;

2.3 退出登錄

sessionId注銷;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM