OAuth2.0授權方式

OAuth2.0授權方式

OAuth2.0授權方式

前文簡單介紹了OAuth2.0,詳情見:簡單認識OAuth2.0

今天看一看授權方式,一共有四種,分別為:授權碼、隱式授權,密碼方式和客戶端憑證。現在使用最多的也是最安全的就是授權碼方式,以下分別簡單介紹下:

授權碼方式(authorization code)

授權碼方式是最完整,流程最嚴密的授權方式,第三方應用先申請一個授權碼(authorization code),然後再用該碼獲取令牌(Token)。

OAuth2.0授權方式

authorization code

它適用於那些有後端的 Web 應用,基於瀏覽器的重定向把用戶導向第三方應用的軟件頁面。分為兩個步驟,第一步通過web獲取認證服務器的授權碼,第二步通過使用第一步的授權碼請求Token,這時候是在服務器後臺進行的,用戶是看不到的,因此這種方式是比較安全的。

一個例子,第一步發送獲取授權碼的請求

OAuth2.0授權方式

例子

其中的請求參數有些是必須的並且是固定的

  • response_type (必須),值為code
  • client_id (必須),每個應用的標記,讓授權服務器知道是誰
  • redirect_uri(可選)重定向的地址
  • scope(可選)範圍,比如讀,寫,服務器自己定義的字符串列表
  • state(可選,建議添加),客戶端添加的用於保持一些狀態等,授權服務會原裝返回

獲取授權碼的請求發送後,授權服務器驗證後,會把code=AUTHORIZATION_CODE&state=xzy返回給客戶端。

第二步獲取Token

OAuth2.0授權方式

獲取token

用獲取的授權碼獲取Token時需要的參數

  • grant_type (必須),值為authorization_code
  • code (必須),第一步獲取的授權碼
  • redirect_uri(必須)重定向的地址
  • clinet_id(必須)客戶端的編號,如果授權服務器知道是誰
  • 請求被執行後,返回一個包含token的json數據,其中是access_token就是令牌信息,refresh_token則是刷新令牌時用到的令牌,避免重複以上2個步驟。

    OAuth2.0授權方式

    獲取token

    到此驗證就完了,以後訪問服務器就需要帶著這個Token了,

    簡化版方式(隱式授權implicit)

    在沒有後端的應用中,允許直接向前端頒發令牌。這種方式沒有授權碼這個中間步驟,所以稱為隱式授權。

    OAuth2.0授權方式

    隱式授權

    請求和授權碼一樣,只是response_type為token,授權服務器接收請求後,直接返回token,例如xxxxx#access_token=2YotnFZFEjr1zCsicMWpAA&state=xyz&token_type=example&expires_in=3600

    密碼式(password

    把資源所有者用戶名和密碼作為獲取訪問令牌的授權許可,這種方式顯然風險很大,因此只適用於其他授權方式都無法採用的情況,而且必須是用戶高度信任的應應用。

    OAuth2.0授權方式

    密碼式

    一個簡單請求的例子:

    OAuth2.0授權方式

    密碼方式的請求

    其中grant_type為password,username和password是資源所有者的用戶名密碼。

    客戶端憑證(client)

    第三方應用以自己的名義,而不是以用戶的名義向授權服務器索取認證,適用於沒有前端的命令行應用,即在命令行下請求令牌。

    OAuth2.0授權方式

    客戶端憑證

    這種請求的grant_type為client_credentials,只用這麼一個參數是必須的。


    分享到:


    相關文章: