幾種常見登錄方式:https://www.cnblogs.com/itlihao/p/14846026.html
1. 什么是OAuth2
OAuth:是一個開放標准,允許用戶授權第三方移動應用訪問他們存儲在另外的服務提供者上的信息,而不需要將用戶名和密碼提供給第三方移動應用或分享他們數據的所有內容。
OAuth2.0:是OAuth協議的延續版本,但不向后兼容OAuth 1.0即完全廢止了OAuth1.0。
有這樣一種場景,一個用戶(假設是QQ),希望讓一個第三方的應用(比如說某個論壇),能夠得到關於自身的一些信息(唯一用戶標識,比如說QQ號,用戶個人信息,比如說是一些基礎資料,昵稱和頭像等)。
但是在獲得這些資料的同時,卻也不能提供用戶名和密碼之類的驗證信息。
比如說用戶不可能將自身的用戶名和密碼給第三方讓第三方到用戶中心之類的地方去獲取信息。要達到這樣的結果肯定有許多的實現方式。而Oatuh2就是實現上述目標的一種規范,或者說是具體實現的指導方案。
1.1 OAuth2應用場景
第三方應用授權登錄:在APP或者網頁接入一些第三方應用時,時長會需要用戶登錄另一個合作平台,比如QQ,微博,微信的授權登錄。
2. 微信登錄
微信開放平台:https://open.weixin.qq.com/
2.1 准備工作
網站應用微信登錄是基於OAuth2.0協議標准構建的微信OAuth2.0授權登錄系統。
在進行微信OAuth2.0授權登錄接入之前,在微信開放平台注冊開發者帳號,並得到開發者資質認證,並擁有一個已審核通過的網站應用,並獲得相應的AppID和AppSecret,申請微信登錄且通過審核后,可開始接入流程。
我們對接阿里的什么文件上傳,短信發送等都是基於SDK的方式。
微信登錄是基於函數回調的方式。
2.2 授權流程說明
微信OAuth2.0授權登錄讓微信用戶使用微信身份安全登錄第三方應用或網站。
在微信用戶授權登錄已接入微信OAuth2.0的第三方應用后,第三方可以獲取到用戶的接口調用憑證(access_token),通過access_token可以進行微信開放平台授權關系接口調用,從而可實現獲取微信用戶基本開放信息和幫助用戶實現基礎開放功能等。
微信OAuth2.0授權登錄目前支持authorization_code模式,適用於擁有server端的應用授權。該模式整體流程為:
1. 第三方發起微信授權登錄請求,微信用戶允許授權第三方應用后,微信會拉起應用或重定向到第三方網站,並且帶上授權臨時票據code參數;
2. 通過code參數加上AppID和AppSecret等,通過API換取access_token;
3. 通過access_token進行接口調用,獲取用戶基本數據資源或幫助用戶實現基本操作。
2.2.1 詳細說明->步驟一->請求Code
第三方使用網站應用授權登錄前請注意已獲取相應網頁授權作用域(scope=snsapi_login),則可以通過在PC端打開以下鏈接:
若提示“該鏈接無法訪問”,請檢查參數是否填寫錯誤,如redirect_uri的域名與審核時填寫的授權域名不一致或scope不為snsapi_login。
urlencode:是一個函數,可將字符串以URL編碼,用於編碼處理。
用法:
URLEncoder.encode("要轉碼的內容");
2.2.2 詳細說明->步驟二->通過code獲取access_token
前言:我們在2.2.1 步驟實現之后,訪問該鏈接,會出現一個二維碼供我們掃描。當我們掃描之后,會重定向到我們設定的一個地址,會在該地址后面帶上code=CODE值&state=STATE值。我們就能得到code值和state值。
通過第一步得到的code去獲取access_token【返回的是JSON,需要從JSON中得到access_token】
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
1、Appsecret 是應用接口使用密鑰,泄漏后將可能導致應用數據泄漏、應用的用戶數據泄漏等高風險后果;存儲在客戶端,極有可能被惡意竊取(如反編譯獲取Appsecret);
2、access_token 為用戶授權第三方應用發起接口調用的憑證(相當於用戶登錄態),存儲在客戶端,可能出現惡意獲取access_token 后導致的用戶數據泄漏、用戶微信相關接口功能被惡意發起等行為;
3、refresh_token 為用戶授權第三方應用的長效憑證,僅用於刷新access_token,但泄漏后相當於access_token 泄漏,風險同上。
建議將secret、用戶數據(如access_token)放在App雲端服務器,由雲端中轉接口調用請求。
2.2.3 詳細說明->步驟三->通過access_token調用接口【獲取用戶的部分微信信息】
前言:我們在2.2.2 步驟實現之后,訪問該鏈接,會返回一個JSON字符串給我們,其中有access_token,openid。如果你想去獲取用戶相關信息,就需要用到這2個玩意。
獲取access_token后,進行接口調用,有以下前提:
1. access_token有效且未超時。
2. 微信用戶已授權給第三方應用帳號相應接口作用域(scope)。
比如:獲取用戶個人信息
獲取用戶個人信息(UnionID機制)
接口說明:
此接口用於獲取用戶個人信息。
開發者可通過OpenID來獲取用戶基本信息。特別需要注意的是,如果開發者擁有多個移動應用、網站應用和公眾帳號,可通過獲取用戶基本信息中的unionid來區分用戶的唯一性,因為只要是同一個微信開放平台帳號下的移動應用、網站應用和公眾帳號,用戶的unionid是唯一的。
換句話說,同一用戶,對同一個微信開放平台下的不同應用,unionid是相同的。請注意,在用戶修改微信頭像后,舊的微信頭像URL將會失效,因此開發者應該自己在獲取用戶信息后,將頭像圖片保存下來,避免微信頭像URL失效后的異常情況。