什么是OAuth授權?
OAuth允許用戶提供一個訪問標記(專業點叫做令牌)給第三方網站,一個訪問標記(專業點叫做令牌)對應一個特定的第三方網站,同時該訪問標記(專業點叫做令牌)只能在特定的時間內訪問特定的資源
說白了就是:也就是說用戶在訪問第三方web或應用的時候,第三方在不知道用戶的賬號和密碼的情況下 經過用戶授權后就可以獲取用戶在服務商哪里存儲的文章,微博信息等等信息
一、OAuth授權必須經過三個步驟
第一步:獲取未授權的Request Token (請求標記) 跳轉到服務商的登錄頁面
第二步:獲取用戶授權Request Token(請求標記) 用戶輸入賬號密碼進行登錄授權
第三步:用授權過的Request Token(請求標記) 換取Access Token (訪問標記)
以上三個步驟是OAuth授權的必須步驟 ,可能很多公司的授權方式各有不同,但是大致步驟是一樣的
下面以新浪微博為例子 介紹下如何進行OAuth授權:
1.首先你要成為新浪的開發者 點擊這里進入開發者網站:http://open.weibo.com
進入后注冊一個賬號 添加開發者個人信息 ,你可以直接用你的微博賬號登錄 然后加入開發者即可 詳細步驟這里不再贅述
2.創建應用 如何創建應用,直接點擊頂部導航欄的我的應用 即可 創建
*假設你創建的應用名稱加做 "程序源微博"
*應用創建完畢默認 就進入"開發階段" 就具備了授權資格
*這個時候點擊我的應用 --> 應用信息 你會看到如下的信息
App Key:917518064 應用的唯一標識
App Secret:b18853174e2902fd05b04dc34d7be792 密鑰
應用地址:https://itunes.apple.com/cn/genre/ios/id36?mt=8
這是時候我們還需要設置一個回調頁面,就是授權成功后跳轉的頁面 如何設置?
點擊編輯 然后輸入你要回調的頁面網址即可
2.有了上面的設置之后 我們就可以進行資源授權了 我們現在都是OAuth授權2.0
(1)首先第一步獲取未授權的Request Token 來到服務器的登錄界面
*新浪提供的頁面是這個頁面:https://api.weibo.com/oauth2/authorize
*必須要傳遞的兩個參數:
client_id (string類型) 申請應用時分配的AppKey // 得知道給哪個應用授權
redirect_uri (string類型) 授權回調地址 // 授權成功后跳轉到哪個頁面
也就是說我們要正確的來到服務器提供的授權登錄界面完整的url地址應該是這樣的:
https://api.weibo.com/oauth2/authorize?client_id=917518064&redirect_uri=http://www.cnblogs.com/syios
打開上面的地址你會看到如下界面:
此時我們輸入我們的微博賬號 這里也可以自己給自己授權也就是說你可以用戶剛剛創建應用的賬號 對你的應用進行授權
當我們點擊登錄后 ,這次授權就成功了,當然如果你是第一次授權可能看到不是上面的界面 而是授權界面 這個時候你點擊授權即可
登錄成功后回跳轉到回調頁面
(2)獲取授權過的Request Token
授權成功后回自動跳轉到回調頁面
你會發現新浪會在回調頁面后面拼接一個參數 這個參數code 就是授權成功后的 Request Token (請求標記)
(3)根據授權過Request Token(請求標記) 獲取一個Access Token(訪問標記)
這個時候新浪提供了另外一個地址 用來獲取訪問標記
URL : https://api.weibo.com/oauth2/access_token
當然也必須要傳如下的參數 才能成功獲取訪問標記:
client_id string 申請應用時分配的AppKey。
client_secret string 申請應用時分配的AppSecret。
grant_type string 請求的類型,填寫authorization_code
code string 調用authorize獲得的code值。
redirect_uri string 回調地址,需需與注冊應用里的回調地址一致
這個時候我們只需要將所有的參數通過POST方式發送給新浪服務器之后我們會得到服務器的返回數據 返回結果如下:
{
"access_token" = "2.00vWf4GEUSKa7D739148f7608SXA9B";
"expires_in" = 137596133;
"remind_in" = 137596133;
uid = 1258537523;
}
access_token: 就是我們需要的訪問標記 我們只需要獲取這個標記 保存即可
uid:表示當前登錄用戶的ID
這里需要大家明白一個知識點:
access_token : 1個用戶給1個應用授權成功后,就獲得對應的1個access_token,作用是:允許1個應用訪問1個用戶的數據
uid:1個用戶對應1個uid,每1個用戶都有自己唯一的uid
舉例:
張三 /李四
應用1 /應用2
張三給應用1、應用2授權成功了:1個uid、2個access_token
李四給應用2授權成功了:1個uid、1個access_token
上面操作:產生了2個uid,3個access_token
3.授權過程中的常見錯誤
1.invalid_request
1> 沒有傳遞必填的請求參數
2> 請求參數不對
3> URL中間留有空格
2.invalid_client
1> client_id的值傳遞錯誤(AppKey不對)
3.redirect_uri_mismatch
1> 回調地址不對
提醒:授權帳號注意 如果應用還沒有經過新浪審核,只能訪問自己或者其他15個測試帳號的微博數據
好了,關於OAuth授權 就說這么多了