1.客戶端呼叫 wx.login() ,獲得返回引數 code
2.客戶端呼叫 wx.request() 將 code 傳送到伺服器
伺服器會獲得返回引數 openid 和 session_key 。這兩個資料主要用在支付,資料簽名,資料解密等與使用者登陸態和標識有關的邏輯中。
openid是使用者唯一標識,但不建議直接用做後端伺服器的各使用者標示符。
session_key 是針對使用者資料進行加密簽名的密匙。session_key在檔案校驗,獲取使用者具體資訊時均需使用
一般為了安全起見,這兩個資料都不會發往客戶端。
4.伺服器應使用 openid 和 session_key 生成 3rd_session ,作為伺服器派發給使用者的登陸態標識token,用於使用者的許可權和資料管理。將其傳送到小程式客戶端。
5.小程式客戶端將 3rd_session 存入 storage中。
6.後續使用者進入小程式時,首先呼叫 wx.checksession() 檢測登陸態,如果失敗,重新發起登陸流程。
7.如果檢測使用者登陸狀態未失效,則從 storage 中讀取 3rd_session。在需要使用者標識的 wx.request() 時作為使用者標識傳送到伺服器檢驗,伺服器判斷其是否合法。
ps.在生成 3rd_session 時,將 3rd_session 作為鍵,將 session_key + openid 作為值,儲存在 伺服器的 session 儲存或資料庫中。每個3rd_session都需要設定乙個失效時間用來進行使用者登陸態管理。
獲取使用者資訊主要有以下要點:
1.當withcredentials 為 true 且 使用者登陸態未到期
返回的資料會包括 encrypteddata,iv等敏感資料。
請求使用者資訊返回資料項如下:userinfo 不包含敏感資料的使用者資訊
rawdata 不包含敏感資料的原始資料字串,用於簽名校驗
signature。 使用sha1( rawdata + sessionkey ) 得到的字串,用於簽名校驗資料
encrypteddata 包含 openid,unionid 等使用者敏感資料的加密資料
iv 加密演算法的初始向量
2.當withcredentials 為 false 時
不要求登陸狀態,返回資料不包含敏感資料,只包含使用者的基本資訊 userinfo 和 校驗資料的rowdata。
簽名校驗(用於校驗資料完整性等):需要使用session_key。客戶端將 signature 和 rawdata 傳送到伺服器,伺服器通過相同的 sha1( rewdata + session_key) 演算法計算出 signature2,並與客戶端傳送過來的signature對比,校驗資料完整性。
加密資料encrypteddata的解密:
小程式微信授權登陸
index wxml view class container view wx if view wx if view class header image src image view view class content view 康健理療儀 申請獲取以下許可權 view text 獲得你的公開資...
微信授權登陸流程(vue SpringMVC)
1 第一步 使用者同意授權,獲取code 2 第二步 通過code換取網頁授權access token 3 第三步 重新整理access token 如果需要 4 第四步 拉取使用者資訊 需scope為 snsapi userinfo scope為snsapi base 2f 2fchong.qq....
微信授權登陸流程(vue SpringMVC)
1 第一步 使用者同意授權,獲取code 2 第二步 通過code換取網頁授權access token 3 第三步 重新整理access token 如果需要 所以我們利用這個state來傳跳回前端頁面的位址。現在拿到code了,可以換access token,取到使用者資訊了 4 第四步 拉取使用...