![OAuth2.0授權方式](http://p2.ttnews.xyz/loading.gif)
OAuth2.0授權方式
前文簡單介紹了OAuth2.0,詳情見:簡單認識OAuth2.0
今天看一看授權方式,一共有四種,分別為:授權碼、隱式授權,密碼方式和客戶端憑證。現在使用最多的也是最安全的就是授權碼方式,以下分別簡單介紹下:
授權碼方式(authorization code)
授權碼方式是最完整,流程最嚴密的授權方式,第三方應用先申請一個授權碼(authorization code),然後再用該碼獲取令牌(Token)。
![OAuth2.0授權方式](http://p2.ttnews.xyz/loading.gif)
authorization code
它適用於那些有後端的 Web 應用,基於瀏覽器的重定向把用戶導向第三方應用的軟件頁面。分為兩個步驟,第一步通過web獲取認證服務器的授權碼,第二步通過使用第一步的授權碼請求Token,這時候是在服務器後臺進行的,用戶是看不到的,因此這種方式是比較安全的。
一個例子,第一步發送獲取授權碼的請求
例子
其中的請求參數有些是必須的並且是固定的
- response_type (必須),值為code
- client_id (必須),每個應用的標記,讓授權服務器知道是誰
- redirect_uri(可選)重定向的地址
- scope(可選)範圍,比如讀,寫,服務器自己定義的字符串列表
- state(可選,建議添加),客戶端添加的用於保持一些狀態等,授權服務會原裝返回
獲取授權碼的請求發送後,授權服務器驗證後,會把code=AUTHORIZATION_CODE&state=xzy返回給客戶端。
第二步獲取Token
獲取token
用獲取的授權碼獲取Token時需要的參數
請求被執行後,返回一個包含token的json數據,其中是access_token就是令牌信息,refresh_token則是刷新令牌時用到的令牌,避免重複以上2個步驟。
獲取token
到此驗證就完了,以後訪問服務器就需要帶著這個Token了,
簡化版方式(隱式授權implicit)
在沒有後端的應用中,允許直接向前端頒發令牌。這種方式沒有授權碼這個中間步驟,所以稱為隱式授權。
隱式授權
請求和授權碼一樣,只是response_type為token,授權服務器接收請求後,直接返回token,例如xxxxx#access_token=2YotnFZFEjr1zCsicMWpAA&state=xyz&token_type=example&expires_in=3600
密碼式(password)
把資源所有者用戶名和密碼作為獲取訪問令牌的授權許可,這種方式顯然風險很大,因此只適用於其他授權方式都無法採用的情況,而且必須是用戶高度信任的應應用。
密碼式
一個簡單請求的例子:
密碼方式的請求
其中grant_type為password,username和password是資源所有者的用戶名密碼。
客戶端憑證(client)
第三方應用以自己的名義,而不是以用戶的名義向授權服務器索取認證,適用於沒有前端的命令行應用,即在命令行下請求令牌。
客戶端憑證
這種請求的grant_type為client_credentials,只用這麼一個參數是必須的。