什么是OAuth?
OAuth允許用戶提供一個(gè)令牌组底,而不是用戶名和密碼來(lái)訪問(wèn)他們存放在特定服務(wù)提供者的數(shù)據(jù)肪凛。每一個(gè)令牌授權(quán)一個(gè)特定的網(wǎng)站(例如毁涉,視頻編輯網(wǎng)站)在特定的時(shí)段(例如送火,接下來(lái)的2小時(shí)內(nèi))內(nèi)訪問(wèn)特定的資源(例如僅僅是某一相冊(cè)中的視頻)烈钞。這樣,OAuth允許用戶授權(quán)第三方網(wǎng)站訪問(wèn)他們存儲(chǔ)在另外的服務(wù)提供者上的信息捎拯,而不需要分享他們的訪問(wèn)許可或他們數(shù)據(jù)的所有內(nèi)容泪幌。
微信授權(quán)步驟
微信公眾平臺(tái)OAuth2.0授權(quán)詳細(xì)步驟如下:
- 用戶關(guān)注微信公眾賬號(hào)。
- 微信公眾賬號(hào)提供用戶請(qǐng)求授權(quán)頁(yè)面URL署照。
- 用戶點(diǎn)擊授權(quán)頁(yè)面URL祸泪,將向服務(wù)器發(fā)起請(qǐng)求
- 服務(wù)器詢問(wèn)用戶是否同意授權(quán)給微信公眾賬號(hào)(scope為snsapi_base時(shí)無(wú)此步驟)
- 用戶同意(scope為snsapi_base時(shí)無(wú)此步驟)
- 服務(wù)器將CODE通過(guò)回調(diào)傳給微信公眾賬號(hào)
- 微信公眾賬號(hào)獲得CODE
- 微信公眾賬號(hào)通過(guò)CODE向服務(wù)器請(qǐng)求Access Token
- 服務(wù)器返回Access Token(網(wǎng)頁(yè)授權(quán)接口調(diào)用憑證)和OpenID(用戶的唯一標(biāo)識(shí))給微信公眾賬號(hào)
- 微信公眾賬號(hào)通過(guò)Access Token向服務(wù)器請(qǐng)求用戶信息(scope為snsapi_base時(shí)無(wú)此步驟)
- 服務(wù)器將用戶信息回送給微信公眾賬號(hào)(scope為snsapi_base時(shí)無(wú)此步驟)
操作實(shí)例
在開(kāi)發(fā)者中心-開(kāi)發(fā)者ID中,可以找到AppId和AppSecret建芙。
請(qǐng)求授權(quán)頁(yè)面的URL
var url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' + appId + '&redirect_uri=' + redirect_uri + '&response_type=code&scope=snsapi_base&state=' + location + '#wechat_redirect';
- appid 公眾號(hào)的唯一標(biāo)識(shí)
- redirect_uri 授權(quán)后重定向的回調(diào)鏈接地址
- response_type 返回類型没隘,請(qǐng)?zhí)顚?xiě)'code'
- scope 應(yīng)用授權(quán)作用域,snsapi_base (不彈出授權(quán)頁(yè)面禁荸,直接跳轉(zhuǎn)右蒲,只能獲取用戶openid)阀湿,snsapi_userinfo (彈出授權(quán)頁(yè)面,可通過(guò)openid拿到昵稱瑰妄、性別陷嘴、所在地。并且间坐,即使在未關(guān)注的情況下灾挨,只要用戶授權(quán),也能獲取其信息)
- state(可選) 重定向后會(huì)帶上state參數(shù)竹宋,開(kāi)發(fā)者可以填寫(xiě)任意參數(shù)值
- #wechat_redirect(可選) 直接在微信打開(kāi)鏈接劳澄,可以不填此參數(shù)。做頁(yè)面302重定向時(shí)候蜈七,必須帶此參數(shù)
即點(diǎn)擊鏈接后,發(fā)起OAuth2授權(quán)請(qǐng)求,提交公眾平臺(tái)的appid,重定向鏈接response_type,當(dāng)前鏈接state
授權(quán)成功后,跳轉(zhuǎn)到重定向鏈接并get傳參獲取code和此前自定義的state
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
- appid 公眾號(hào)的唯一標(biāo)識(shí)
- secret 公眾號(hào)的appsecret
- code 填寫(xiě)第一步獲取的code參數(shù)
- grant_type 填寫(xiě)為authorization_code
調(diào)用api即可獲取access_token(如為snsapi_userinfo)和openid,再調(diào)用api獲取用戶信息
https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID
注意snsapi_base時(shí)只到openid即截止,無(wú)法獲得access_token及用戶信息(昵稱性別所在地頭像)等