咱們的項目須要爲一個認證網站開發一套API,這些API能夠提供給不少公司來調用,可是公司在調用以前,必須先作受權認證,由此接觸到了oAuth協議。html
如下內容來自網絡整理安全
定義網絡
OAUTH協議爲用戶資源的受權提供了一個安全的、開放而又簡易的標準。與以往的受權方式不一樣之處是OAUTH的受權不會使第三方觸及到用戶的賬號信息(如用戶名與密碼),即第三方無需使用用戶的用戶名與密碼就能夠申請得到該用戶資源的受權,所以OAUTH是安全的。網站
產生背景spa
若是一個用戶擁有兩項服務需求:一項服務是圖片在線存儲服務A,另外一個是圖片在線打印服務B。如
下圖所示。因爲服務A與服務B是由兩家不一樣的服務提供商提供的,因此用戶在這兩家服務提供商的網站上各自注冊了兩個用戶,假設這兩個用戶名各不相同,密碼也各不相同。當用戶
要使用服務B打印存儲在服務A上的圖片時,用戶該如何處理?法一:用戶可能先將待打印的圖片從服務A上下載下來並上傳到服務B上打印,這種方式安全但處理比較繁瑣,效率低下;法二:用戶將在服務A上註冊的用戶名與密碼提供給服務B,服務B使用用戶的
賬號再去服務A處下載待打印的圖片,這種方式效率是提升了,可是安全性大大下降了,服務B能夠使用用戶的用戶名與密碼去服務A上查看甚至篡改用戶的資源。
oAuth的解決思路
用OAUTH實現背景一節中的典型案例:當服務B(打印服務)要訪問用戶的服務A(圖片服務)時,經過OAUTH機制,服務B向服務A請求未經用戶受權的Request Token後,服務A將引導用戶在服務A的網站上登陸,並詢問用戶是否將圖片服務受權給服務B。用戶贊成後,服務B就能夠訪問用戶在服務A上的圖片服務。整個過程服務B沒有觸及到用戶在服務A的賬號信息。
OAUTH認證受權就三個步驟,三句話能夠歸納:
1. 獲取未受權的Request Token
2. 獲取用戶受權的Request Token
3. 用受權的Request Token換取Access Token
當應用拿到Access Token後,就能夠有權訪問用戶受權的資源了。你們可能看出來了,這三個步驟不就是對應OAUTH的三個URL服務地址嘛。一點沒錯,上面的三個步驟中,每一個步驟分別請求一個URL,而且收到相關信息,而且拿到上步的相關信息去請求接下來的URL直到拿到Access Token。
具體每步執行信息以下:
A. 使用者(
第三方軟件)向OAUTH服務提供商請求未受權的Request Token。向Request Token URL發起請求,請求須要帶上的參數見上圖。
B. OAUTH服務提供商贊成使用者的請求,並向其頒發未經用戶受權的oauth_token與對應的oauth_token_secret,並返回給使用者。
C. 使用者向OAUTH服務提供商請求用戶受權的Request Token。向User Authorization URL發起請求,請求帶上上步拿到的未受權的token與其密鑰。
D. OAUTH服務提供商將引導用戶受權。該過程可能會提示用戶,你想將哪些受保護的資源受權給該應用。此步可能會返回受權的Request Token也可能不返回。如Yahoo OAUTH就不會返回任何信息給使用者。
E. Request Token 受權後,使用者將向Access Token URL發起請求,將上步受權的Request Token換取成Access Token。請求的參數見上圖,這個比第一步A多了一個參數就是Request Token。
F. OAUTH服務提供商贊成使用者的請求,並向其頒發Access Token與對應的密鑰,並返回給使用者。
G. 使用者之後就能夠使用上步返回的Access Token訪問用戶受權的資源。
從上面的步驟能夠看出,用戶始終沒有將其用戶名與密碼等信息提供給使用者(
第三方軟件),從而更安全。