OAuth 2.0 是一個開放的標準協議,容許應用程序訪問其它應用的用戶受權的數據(如用戶名、頭像、暱稱等)。好比使用微信、QQ、支付寶登陸等第三方網站,只須要用戶點擊受權按鈕,第三方網站就會獲取到用戶在微信、QQ、支付寶的信息(固然信息都是不敏感數據如用戶名、頭像、暱稱等),獲取這些信息後,第三方網站就能夠用這些信息建立一個第三方用戶帳戶,不須要再用戶手動填寫用戶名、頭像、暱稱等......要想了解這個受權過程,咱們須要想了解什麼是OAuth 2.0.api
在OAuth 2.0中"受權類型"指的是應用程序獲取令牌的方式。OAuth 2.0定義了若干受權類型,有Authorization Code(受權碼)、Implicit(隱式受權)、Password(密碼受權)、Client Credentials(客戶端憑證)、Device Code(設備代碼)、Refresh Token(刷新令牌)。根據每種受權的應用場景選擇不一樣的受權。每種受權類型都針對特定用例進行了優化,不管是Web應用程序,本機應用程序,沒法啓動Web瀏覽器的設備或服務器到服務器應用程序。對於網站、手機app受權,如今用的最普遍的就是受權碼受權。瀏覽器
受權碼與其餘受權類型不一樣點是,它說先要求應用程序啓動瀏覽器來開始流程。受權的大體流程以下:安全
首先應用程序須要構造一個URL,URL的結構以下:https://authorization-server.com/auth?response_type=code&client_id=29352915982374239857&redirect_uri=https%3A%2F%2Fexample-app.com%2Fcallback&scope=create+delete&state=xcoiv98y2kd22vusuye3kch
服務器
如豆瓣須要獲取微信的受權信息,根據微信文檔,拼接這個URL,會重定向到微信受權頁面,當用戶點擊受權時,會返回到redirect_uri對應的值的網址,微信會在網址後面添加上code=CODE&state=STATE。code的值就是微信返回的信息,state是的值是應用程序以前傳遞的值。微信
應用程序須要接受返回的code。注意code有有效期,而且只能使用一次,微信認證爲5分鐘過時,支付寶爲3分鐘到24小時。app
獲取access token應用程序須要經過POST請求並帶着下面的參數請求受權服務器。優化
請求受權服務器後,服務器會返回網站
What is the OAuth 2.0 Authorization Code Grant Type?{ "access_token":"MTQ0NjJkZmQ5OTM2NDE1ZTZjNGZmZjI3", //咱們最終所須要的access token "token_type":"bearer", //令牌類型 "expires_in":3600, //access_token接口調用憑證超時時間,單位(秒) "refresh_token":"IwOGYzYTlmM2YxOTQ5MGE3YmNmMDFkNTVk", //當access token超時失效後,須要用refresh token來再次獲取access token "scope":"create delete" //應用受權做用域 }
受權流程到此就結束了。
參考: