我在了解設計Restful接口的時候,發現涉及到接口驗證,可以利用OAuth2.0機制來驗證。
我開發的微信端Web網頁通過微信授權的時候,微信端也是用OAuth2.0機制來獲取用戶基本信息。
OAuth2.0
有四種授權模式:授權模式(微信)、簡化模式(前者簡化版)、密碼模式、客戶端模式。
授權模式(微信)
開發的微信端Web應用可以利用通過微信來獲取用戶基本信息,這樣就免了用戶去注冊登錄的繁雜步驟,只用點擊微信的授權頁面就能登錄。
用戶僅僅需要點擊授權,Web應用就能通過微信拿到用戶的微信基本信息,大大提高用戶體驗。
步驟
簡化的步驟:Web后端拿到access_token,通過access_token去跟微信拿到用戶信息。
所以關鍵是如何能夠拿到access_token。
1. 用戶授權
"https://open.weixin.qq.com/connect/oauth2/authorize?"
+ "appid=APPID&" // 代表你公眾號
+ "redirect_uri=REDIRECTURL&" // 處理Code的URL地址
+ "response_type=code&"
+ "scope=SCOPE&" // 要拿到用戶的基本微信(需要授權)還是只拿到用戶的openid
+ "state=STATE&connect_redirect=1#wechat_redirect"; // state 參數用來驗證 防止csrf(跨站請求偽造)攻擊
這是微信官方頁面,會出現授權按鈕。
2. 獲取access_token
一旦用戶在上述頁面點擊了授權,那么微信就會把code參數和state參數傳輸到我們redirect_uri后端。
拿到state參數可用於驗證,從而防止cstf。
重點在於code參數的利用。
"https://api.weixin.qq.com/"
+ "sns/oauth2/access_token?"
+ "appid=APPID&"
+ "secret=SECRET&"
+ "code=CODE&"
+ "grant_type=authorization_code";
然后再通過微信的接口,發送我們的appid和appsecret以及code,然后就能拿到access_token和授權用戶的openid。
3. access_token和openid
通過access_token和openid 我們就能通過微信官方接口來獲取授權用戶的基本信息。
為什么access_token和openid就能拿到用戶信息
1. 在微信官方頁面,用戶點擊了授權(用戶同意)
2. appsecret只有我們本身Web應用和微信才知道,同時redirect_uri也是登記在微信公眾平台(Web應用的正確性)