OAuth20原理圖解第三方網站為什么可以使用微信登錄

歡迎大家關注今日頭條號「JAVA前線」查看更多精彩分享文章,主要包括源碼分析、實際應用、架構思維、職場分享、產品思考
1 文章概述假設小明開發了一個A網站,需要支持微信登陸和淘寶賬號登陸 。如果你是微信或者淘寶開發人員 , 你會怎么設計這個功能?本文結合淘寶開放平臺官方文檔以淘寶賬號為例 。
從最簡單視角去思考,用戶在網站A輸入淘寶用戶名和密碼,網站A調用淘寶接口校驗輸入信息,校驗通過則登陸成功 , 整體流程如下圖:

OAuth20原理圖解第三方網站為什么可以使用微信登錄

文章插圖
上述思路存在什么問題?最顯著問題就是信息安全問題 。問題第一個方面是用戶需要將淘寶用戶名和密碼輸入網站A,這樣會帶來用戶名和密碼泄露風險 。問題第二個方面是如果用戶不信任網站A , 那么也不會輸入淘寶用戶名和密碼,影響網站A業務開展 。
2 OAuth2.0第三方登陸信息安全問題應該如何解決?OAuth是一種流行標準 。如果執行這行這個標準,那么用戶可以在不告知A網站淘寶用戶名和密碼情況下,使用淘寶賬號登陸A網站 。
目前已經發展到OAuth2.0版本,相較于1.0版本更加關注客戶端開發者簡易性,而且為桌面應用、web應用、手機設備提供專門認證流程 。
2.1 四種角色OAuth2.0標準定義四種角色:
客戶端(Client)資源所有者(Resource Owner)資源服務器(Resource Server)授權服務器(Authorization Server)四種角色交互流程:
OAuth20原理圖解第三方網站為什么可以使用微信登錄

文章插圖
本文場景對應四種角色:
OAuth20原理圖解第三方網站為什么可以使用微信登錄

文章插圖
2.2 四種模式OAuth2.0標準定義四種授權模式:
授權碼模式(authorization code)隱式模式(implicit)密碼模式(password)客戶端模式(client credentials)四種授權模式中最常用的是授權碼模式,例如微信開發平臺文檔介紹對于網站應用微信OAuth2.0授權登錄目前支持授權碼模式,所以本文只介紹授權碼模式,后續文章會詳細比較四種模式 。
2.3 整體流程第一個流程是創建應用,A網站開發者首先去淘寶開放平臺創建應用,開放平臺會生成一個client_id作為A網站唯一標識 。
第二個流程是授權流程 , 用戶在A網站點擊使用淘寶賬號登陸時 , 實際上跳轉至A網站拼接授權URL頁面,這個頁面由淘寶提供 。
用戶在授權頁面輸入淘寶用戶名和密碼,校驗成功后跳轉至A網站回調地址 , 這時A網站會拿到一個code,后臺再使用code去獲取access_token 。
第三個流程是獲取信息,獲取到access_token相當于獲取到一把鑰匙,再按照規范調用淘寶對外提供接口就可以獲取到用戶數據 。
OAuth20原理圖解第三方網站為什么可以使用微信登錄

文章插圖
2.4 為什么安全第一個方面A網站開發人員需要在淘寶開放平臺進行申請,需要輸入個人信息或者公司信息,這樣A網站可靠性有了一定程度保證 。
第二個方面在第一章節方案用戶需要在A網站輸入淘寶用戶名和密碼,但是在OAuth2.0方案2.4步驟雖然也要輸入淘寶用戶名密碼,但是這個頁面由淘寶官方提供,安全性得到了保證 。
第三個方面access_token(令牌)并沒有在瀏覽器中傳遞,而是需要A網站在獲取到code之后去后臺程序換取,避免了鑰匙泄露風險 。
第四個方面code(授權碼)在瀏覽器傳遞有一定風險,但是具有兩個特性一定程度保證了安全:
(1) code具有效期 , 超過有效期未使用 , 需要重新按照授權流程獲取