OAuth2.0 受權許可 之 Authorization Code

寫在前面:

    在前一篇博客《OAuth2.0 原理簡介》中咱們已經瞭解了OAuth2.0的原理以及它是如何工做的,那麼本篇咱們未來聊一聊OAuth的一種受權許可方式:受權碼(Authorization Code)javascript

什麼是Authorization Code ?

   簡單來講受權碼就是的在第三方應用程序請求Authrization Server來獲取AccessToken以前的預先校驗,增長了獲取token的安全性。好比你吭哧吭哧寫了一天的代碼,急於回家吃上一口媳婦作的熱飯。當你走到小區門口的時候你須要刷卡才能進入到小區,而後找到你家在哪一棟樓,幾單元幾號,而後掏出鑰匙開門,才能回到家。在這個過程當中受權碼就至關因而你在用鑰匙開門回家的前一步身份確認,若是你不是這個小區的,那你天然是沒有辦法進入到小區內部的。受權碼方式是OAuth2.0最經常使用的一種受權方式,好比:QQ,豆瓣,新浪微博等用的都是這種方式。html

受權碼的工做流程解析

 

上圖的流程表示了請求的全過程,須要注意的點是:java

發起受權請求須要的參數以下:安全

對應步驟(C),客戶端向Authorization Server發起請求的時候須要提供如下參數:服務器

  1. response_type:必選。值固定爲「code」。
  2. client_id:必選參數(第三方應用的標識ID,告訴服務器誰須要獲得受權)
  3. state:Client提供的一個字符串,服務器會原樣返回給Client。
  4. redirect_uri:必選參數(受權成功後的重定向地址)
  5. scope:可選參數(表示受權範圍)

完整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

  1. code:受權碼(用於的下一步中請求token使用)
  2. state:步驟(C)中客戶端提供的state參數原樣返回。

完整的URL以下:code

Location: https://client.example.com/oauth2?code=SplxlOBeZQQYbYS6WxSbIA&state=xyz

發起獲取token的請求參數以下:server

對應步驟(G):

  1. grant_type:必選參數(固定值「authorization_code」)
  2. code : 必選參數(上一步Response 中響應的code,避免在請求的過程當中被篡改)
  3. redirect_uri:必選參數(必須和Request中提供的redirect_uri相同)
  4. client_id:必選參數(必須和上一步Request中提供的client_id相同,不能token和受權碼請求的第三方應用不一致)

獲得token的response包含以下信息:

對應步驟(H):

  1. access_token:訪問令牌(服務器端加密過的字符串)。
  2. refresh_token:刷新令牌(刷新令牌的字符串)
  3. expires_in:過時時間(令牌的過時時間)
{
   "access_token":"MJhjskotnFZFEjr1zCsicHJKSLA",
   "token_type":"granttype",
   "expires_in":4800, 
   "refresh_token":"JHJhjasdsjhKNSGKmzHDK", 
   "example_parameter":"example_value_test"
}

  若是有一天你的小區的鑰匙被一個陌生人拿到了,那麼他就能夠名正言順的進入的小區裏面,那麼他進入到你家的機會就大了不少。同樣的道理,受權碼若是被竊取的話,那麼對方就能夠直接用你的受權碼來獲取到token從而竊取到你的信息,在使用的時候咱們首先要要求受權碼不可以被重複使用,若是一旦發如今token的生命週期內受權碼被重複使用的話則會強制銷燬此受權碼生成的全部token,從新再作一次登錄的受權驗證。

寫在最後:

    受權碼是咱們平時用到的最多的一種受權方式,它使得咱們的的應用程序在獲取token以前多了一個額外的安全層來保證咱們的受權和訪問過程是安全可靠的。

    參考資料: https://oauth.net/2/grant-types/authorization-code/

相關文章
相關標籤/搜索