在前一篇博客《OAuth2.0 原理簡介》中咱們已經瞭解了OAuth2.0的原理以及它是如何工做的,那麼本篇咱們未來聊一聊OAuth的一種受權許可方式:受權碼(Authorization Code)javascript
簡單來講受權碼就是的在第三方應用程序請求Authrization Server來獲取AccessToken以前的預先校驗,增長了獲取token的安全性。好比你吭哧吭哧寫了一天的代碼,急於回家吃上一口媳婦作的熱飯。當你走到小區門口的時候你須要刷卡才能進入到小區,而後找到你家在哪一棟樓,幾單元幾號,而後掏出鑰匙開門,才能回到家。在這個過程當中受權碼就至關因而你在用鑰匙開門回家的前一步身份確認,若是你不是這個小區的,那你天然是沒有辦法進入到小區內部的。受權碼方式是OAuth2.0最經常使用的一種受權方式,好比:QQ,豆瓣,新浪微博等用的都是這種方式。html
上圖的流程表示了請求的全過程,須要注意的點是:java
發起受權請求須要的參數以下:安全
對應步驟(C),客戶端向Authorization Server發起請求的時候須要提供如下參數:服務器
完整URL以下所示:加密
GET /authorize?response_type=code&client_id=1&state=xyz&redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Foauth2&scope=user,photo HTTP/1.1 Host: server.example.com
獲得受權返回數據以下:spa
對應上圖中的步驟(E),A受權服務器會返回下面信息:.net
完整的URL以下:code
Location: https://client.example.com/oauth2?code=SplxlOBeZQQYbYS6WxSbIA&state=xyz
發起獲取token的請求參數以下:server
對應步驟(G):
獲得token的response包含以下信息:
對應步驟(H):
{ "access_token":"MJhjskotnFZFEjr1zCsicHJKSLA", "token_type":"granttype", "expires_in":4800, "refresh_token":"JHJhjasdsjhKNSGKmzHDK", "example_parameter":"example_value_test" }
若是有一天你的小區的鑰匙被一個陌生人拿到了,那麼他就能夠名正言順的進入的小區裏面,那麼他進入到你家的機會就大了不少。同樣的道理,受權碼若是被竊取的話,那麼對方就能夠直接用你的受權碼來獲取到token從而竊取到你的信息,在使用的時候咱們首先要要求受權碼不可以被重複使用,若是一旦發如今token的生命週期內受權碼被重複使用的話則會強制銷燬此受權碼生成的全部token,從新再作一次登錄的受權驗證。
受權碼是咱們平時用到的最多的一種受權方式,它使得咱們的的應用程序在獲取token以前多了一個額外的安全層來保證咱們的受權和訪問過程是安全可靠的。