天天看點

OAuth授權過程

什麼是OAuth授權?

一、什麼是OAuth協定

  OAuth(開放授權)是一個開放标準,所謂OAuth(即Open Authorization,開放授權),它是為使用者資源授權提供了一種安全簡單的标準,允許第三方網站在使用者授權的前提下通路在使用者在服務商那裡存儲的各種資訊。而這種授權無需将使用者提供使用者名和密碼提供給該第三方網站而是直接從服務商提供的頁面直接登入。

  OAuth允許使用者提供一個通路标記(專業點叫做令牌)給第三方網站,一個通路标記(專業點叫做令牌)對應一個特定的第三方網站,同時該通路标記(專業點叫做令牌)隻能在特定的時間内通路特定的資源,說白了就是:也就是說使用者在通路第三方web或應用的時候,第三方在不知道使用者的賬号和密碼的情況下 經過使用者授權後就可以擷取使用者在服務商哪裡存儲的文章,微網誌資訊等等資訊。

一、OAuth授權必須經過三個步驟

  第一步: 擷取未授權的Request Token (請求标記)  跳轉到服務商的登入頁面

  第二步: 擷取使用者授權Request Token(請求标記) 使用者輸入賬号密碼進行登入授權

  第三步: 用授權過的Request Token(請求标記)  換取Access Token (通路标記)

  以上三個步驟是OAuth授權的必須步驟 ,可能很多公司的授權方式各有不同,但是大緻步驟是一樣的

下面以新浪微網誌為例子 介紹下如何進行OAuth授權:

1.首先你要成為新浪的開發者  點選這裡進入開發者網站:http://open.weibo.com

進入後注冊一個賬号 添加開發者個人資訊 ,你可以直接用你的微網誌賬号登入然後加入開發者即可,詳細步驟這裡不再贅述。

2.建立應用如何建立應用,直接點選頂部導航欄的我的應用即可建立。

*假設你建立的應用名稱加做 "程式源微網誌"

*應用建立完畢預設 就進入"開發階段" 就具備了授權資格

*這個時候點選我的應用 --> 應用資訊 你會看到如下的資訊

OAuth授權過程

App Key:917518064   應用的唯一辨別

App Secret:b18853174e2902fd05b04dc34d7be792  密鑰

應用位址:https://itunes.apple.com/cn/genre/ios/id36?mt=8

這是時候我們還需要設定一個回調頁面,就是授權成功後跳轉的頁面如何設定?

OAuth授權過程

點選編輯然後輸入你要回調的頁面網址即可

2.有了上面的設定之後 我們就可以進行資源授權了 我們現在都是OAuth授權2.0

(1)首先第一步擷取未授權的Request Token來到伺服器的登入界面

*新浪提供的頁面是這個頁面:https://api.weibo.com/oauth2/authorize

*必須要傳遞的兩個參數: 

client_id (string類型)     申請應用時配置設定的AppKey // 得知道給哪個應用授權

redirect_uri (string類型)     授權回調位址 // 授權成功後跳轉到哪個頁面

也就是說我們要正确的來到伺服器提供的授權登入界面完整的url位址應該是這樣的:

打開上面的位址你會看到如下界面:

OAuth授權過程

此時我們輸入我們的微網誌賬号 這裡也可以自己給自己授權也就是說你可以使用者剛剛建立應用的賬号 對你的應用進行授權

當我們點選登入後 ,這次授權就成功了,當然如果你是第一次授權可能看到不是上面的界面 而是授權界面 這個時候你點選授權即可

登入成功後回跳轉到回調頁面

(2)擷取授權過的Request Token 

授權成功後回自動跳轉到回調頁面

OAuth授權過程

你會發現新浪會在回調頁面後面拼接一個參數 這個參數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不對)

繼續閱讀