OAuth2.0受權,以及獲取access_token的陷阱
1)獲取受權碼:code。獲取獲取受權碼的方法能夠在開放平臺的文檔得到: http://open.weibo.com/wiki/%E9%A6%96%E9%A1%B5 下面來簡單說一下怎麼獲取受權碼:
首先是組合如下url:
https://api.weibo.com/oauth2/authorize?client_id=CLIENT_ID&redirect_uri=REDIRECT_URI&response_type=code
sadasd上面的url,須要填入 CLIENT_ID 和 REDIRECT_URI 兩個參數,第一個是你應用的AppKey,第二個是回調頁面的url
AppKey能夠在「個人應用」的控制檯得到:
![](http://static.javashuo.com/static/loading.gif)
回調頁面的url在「個人應用」->"應用信息"->"高級信息" 設置,App Secret(獲取access_token的時候要用到) 也能夠在這裏得到:
![](http://static.javashuo.com/static/loading.gif)
如下是一個例子: https://api.weibo.com/oauth2/authorize?client_id=123050457758183&redirect_uri=http://www.example.com/response&response_type=code
組合完成後,將這個連接放到你但願被用戶觸發的位置,好比你能夠放到一個網頁上:
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
受權及會發送受權碼給剛剛填寫的回調頁面。
![](http://static.javashuo.com/static/loading.gif)
2)根據接收到的受權碼獲取access_token,一樣這個在開放平臺中也有教程,可是這個教程是錯的 ( >_< !) ,下面先說一下這個坑,而後再或如下正確的獲取方式。
2.1)官方的誤導教程:
![](http://static.javashuo.com/static/loading.gif)
官方上寫的是用POST請求獲取access_token的接口,那麼通常都會想到用 curl 來作post請求:
![](http://static.javashuo.com/static/loading.gif)
好了,配好,程序跑起來,等待返回access_token……結果是:
'{"error":"invalid_request","error_code":21323,"request":"/2/oauth2/access_token","error_uri":"/2/oauth2/access_token","error_description":"miss client id or secret"}'
不管你是怎麼測試,怎麼改順序都是拋這個異常。我蠻仔細看看拋出的異常: miss client id or secret 上面寫着是 client_id 或 secret丟失,反覆查看,輸出這兩個參數,然而不沒有發現有丟失。至此,依然認爲不是新浪的錯(畢竟新浪已經作得那麼大,不至於犯這種小錯誤),而後我重複地仔細地看光放的文檔,看是否是我漏了什麼關鍵點。而後,最後發現並無,我開始認爲是新浪的錯,通過一輪百度以及頭腦風暴,(請容許我作個悲傷的表情)真的是新浪的錯,傳參根本不是用post,估計他接受也不是用post的方式接受,因此纔會一直拋出 miss client id or secret 的異常,可惡的是真正的傳參方式居然是GET,是GET,是GET……那ntm寫那麼大個POST是幾個意思,並且壓根不GET又是幾個意思,這是砸本身招牌的節奏,此刻我心裏崩潰的。
2.2)正確的獲取access_token的方式
策略:GET和POST混合:用GET去傳遞參數,CURL(POST)來返回access_token。
![](http://static.javashuo.com/static/loading.gif)
上圖紅框內的url,即爲傳參的方式,而下面則是用 POST來請求數據。
下面是請求道數據(json格式):