微信小程序的登陸流程詳解


小程序登陸和登陸狀態維護

1.客戶端調用 wx.login() ,獲得返回參數 code

2.客戶端調用 wx.request() 將 code 發送到服務器

3.服務器將 code 和存儲在服務器的 appid 和 appSecret 共三個參數作為請求參數加入URL,向下面的微信服務器接口發起請求:

https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code

服務器會獲得返回參數 openid 和 session_key 。這兩個數據主要用在支付,數據簽名,數據解密等與用戶登陸態和標識有關的邏輯中。

openid是用戶唯一標識,但不建議直接用做后端服務器的各用戶標示符。

session_key 是針對用戶數據進行加密簽名的密匙。session_key在文件校驗,獲取用戶具體信息時均需使用

一般為了安全起見,這兩個數據都不會發往客戶端。

4.服務器應使用 openid 和 session_key 生成 3rd_session ,作為服務器派發給用戶的登陸態標識token,用於用戶的權限和數據管理。將其發送到小程序客戶端。

5.小程序客戶端將 3rd_session 存入 storage中。

6.后續用戶進入小程序時,首先調用 wx.checkSession() 檢測登陸態,如果失敗,重新發起登陸流程。

ps.微信文檔中說明使用 wx.checkSession() 來進行用戶登陸態的時間管理,使開發者無需再開發用戶登陸態時間管理邏輯,但實際開發中,wx.checkSession存在延遲,導致用戶剛進入小程序時比較卡,所以建議開發者仍然自己去處理用戶的登陸態過期時間管理,根據用戶的token來使用相關邏輯進行處理。

7.如果檢測用戶登陸狀態未失效,則從 storage 中讀取 3rd_session。在需要用戶標識的 wx.request() 時作為用戶標識發送到服務器檢驗,服務器判斷其是否合法。

ps.在生成 3rd_session 時,將 3rd_session 作為鍵,將 session_key + openid 作為值,存儲在 服務器的 session 存儲或數據庫中。每個3rd_session都需要設置一個失效時間用來進行用戶登陸態管理。

獲取用戶信息

微信官方禁止無必要的獲取用戶信息,尤其是在用戶剛進入小程序時。開發者最好在需要時再調用接口獲取用戶信息,保證小程序的審核通過。

獲取用戶信息主要有以下要點:

根據微信請求用戶信息接口wx.getUserinfo()函數的請求參數withCredentials的布爾值及用戶的登陸狀態不同,會有不同的返回值。

1.當withCredentials 為 true 且 用戶登陸態未到期

返回的數據會包括 encryptedData,iv等敏感數據。

請求用戶信息返回數據項如下:

  1. userinfo 不包含敏感數據的用戶信息
  2. rawData 不包含敏感數據的原始數據字符串,用於簽名校驗
  3. signature。 使用sha1( rawData + sessionkey ) 得到的字符串,用於簽名校驗數據
  4. encryptedData 包含 openId,unionId 等用戶敏感數據的加密數據
  5. iv 加密算法的初始向量

2.當withCredentials 為 false 時

不要求登陸狀態,返回數據不包含敏感數據,只包含用戶的基本信息 userinfo 和 校驗數據的rowData。


小程序的數據簽名校驗和數據解密

順便提一下小程序的簽名校驗和數據解密

簽名校驗(用於校驗數據完整性等):

需要使用session_key。客戶端將 signature 和 rawData 發送到服務器,服務器通過相同的 sha1( rewData + session_key) 算法計算出 signature2,並與客戶端發送過來的signature對比,校驗數據完整性。


加密數據encryptedData的解密:

需要客戶端將接口返回的encryptedData發送到服務器,服務器使用 appId 和 session_key ,根據加密算法的初始向量 iv 對 encryptedData 進行解密(微信提供有后端解密代碼,包括python,php等(無java)


免責聲明!

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



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