微信登录,用户授权给第三方,第三方在获得授权码之前微信怎么判断是哪个用户授的权,还有请求accessToken时,只带了code,势必生成code的时候会有和用户相关的绑定信息,要不怎么去验code,只有code正确,才会生成相应的token,求大神指教,感觉理解还不到位
高洛峰2017-04-18 09:57:06
code是臨時數據,由於是透過連結跳轉傳遞給你的,所以這個參數不能是用戶身份相關的數據,所以給你一個臨時數據,然後你再用這個臨時數據去換取代表用戶身份的token。
怪我咯2017-04-18 09:57:06
微信授權需要你掃二維碼,你掃碼的時候微信會發送訊息給伺服器,這樣伺服器就知道是誰授的權了。
回傳的code是伺服器產生的唯一值,跟使用者資訊一起保存在伺服器上呢,微信當然可以分辨
PHPz2017-04-18 09:57:06
謝謝以上的回答,我看了一點源碼,是的確實有綁定關係,生成授權碼時,微信認證服務器會判斷是否登錄,如果登錄後,會生成這個用戶相關的token(usernamepasswordtoken,這個token跟換的token沒有關係,只是用來識別使用者的),然後產生code,儲存code、client_id、username三者的關係,然後回傳code,當客戶端去請求token時,會根據client_id、code驗code的正確性,正確的話,微信認證伺服器會獲得當前用戶,然後根據client_id、username、scop(如果scope不為空的話)產生authenicateId,再產生accessToken,保存authenicateId和accessToken的關係,最後removeCode,返回accessToken