當前位置:名人名言大全網 - 短信平臺 - 梳理微信小程序登錄時序圖:授權與 Oauth2.0

梳理微信小程序登錄時序圖:授權與 Oauth2.0

最近開發微信小程序,做登錄功能時遇到下圖。

看太懂,有幾處疑惑地方:

下面就是尋找答案的過程。

豪車模型

鄰居模型

在上面兩個模型中。豪車的主鑰匙賦予泊車鑰匙部分權限,而妳賦予妳的鄰居所有的權限。比較之下,我們更希望使用豪車模型賦予部分權限,而不是鄰居模型,萬壹他偷偷配了把鑰匙呢?這種授權存在不安全性,在網絡開發中也是如此。

登錄時可以選擇社交賬號登錄,這裏以 QQ 為例。這裏涉及三方:當前要登錄的用戶,以下簡稱 用戶 ,其它兩方是: , QQ 服務器 。因為 用戶

之前註冊過 QQ, 請求 QQ 服務器 授權用戶的 QQ 基本信息,這樣用戶就不用在上再進行註冊了。

下面來探討下 QQ 服務器 如何授權 當前 用戶 的 QQ 基本信息。

這種方法比較簡單, 用戶 告訴 它的 QQ 賬號密碼,拿著賬號密碼去請求 QQ 服務器獲取用戶基本信息。

優點 :操作簡單。

缺點 :用戶將 qq 賬號密碼給了,獲得了該用戶在 QQ 上的所有特權,不僅可以查看基本信息,還可以查看 QQ 空間,查看 QQ 郵箱等,而用戶的本意是只讓獲取 QQ 基本信息這壹項特權。

下面是在 小胡子哥的個人博客 裏看到的,將整個授權過程講解的生動形象,我就不做二次加工,直接截取部分內容如下。

開發微信小程序第壹步要在 微信公眾平臺 上註冊壹個賬號,註冊完成後在 設置 > 開發設置 裏可以看到 AppID 和 AppSecret,這相當於上面提到的 Client Id 和 Client Secret。

微信登錄用戶 在 微信 中打開 小程序 , 小程序 中運行了 wx.login 接口,此時 小程序 拿著 appid 去請求 微信服務器 給 小程序 授權,讓它可以調用壹些微信接口,比如獲取微信登錄用戶的基本信息。因為是 微信登錄用戶 進行操作的,所以微信那端默認是同意授權的。(appid 哪裏來?在新建小程序項目時輸入,每個 appid 和小程序都是壹壹對應的)

上面也提到,這個 code 可能會泄露,所以需要 code + appid + appsecret 去再次拜訪微信服務器獲取令牌 session_key 和用戶標識 openid。

這裏有個疑問?為什麽獲取 code 在小程序上做,而獲取 session_key 在第三方服務器上操作?這是因為獲取 code 需要使用 appid 去跳轉微信服務器授權頁面,再使用當前 微信登錄用戶 默認同意此次授權,如果坐在第三方服務器上,appid 我們是知道的,但是當前 微信登錄用戶 是不知道,只要手機上的微信知道。

那為什麽請求 session_key 在第三方服務器上操作?這是因為前面也說過 code 只能表明微信服務器統壹此次授權,但是 code 可能會泄露,還需要第二張門票 appsecret 告訴微信服務器 “就是我,不是別人” 來請求獲取 session_key 的。可見 appsecret 對於安全的重要性,放在第三方服務器方便管理。

關於 openid 和 session_key 說明?session_key 就是返回的綠卡,此後每次訪問微信服務器資源都要帶上它,這樣微信服務器才知道此次請求是有授權的,我可以把資源給妳。openid 是同意授權的那個人,這裏是 微信登錄用戶 的標識 ID。也就是為什麽 code 要在小程序中獲取中我們不知道的那個 微信登錄用戶 ID。

到此,上圖中涉及 Oauth2.0 的部分已經結束,下面的那些都是普通的 session 維持會話機制,這裏就不再贅述。

由於作者文筆有限,文章如有遺漏或表達有誤,請不吝賜教。如果仍對微信授權或 Oauth2.0 有疑問的,歡迎留言討論。