Authorization Code 方式適用於有自己的服務器的應用。之所以叫這個名字,是因為流程中引入了一個叫做 authorization code 的東西。這個東西是一個一次性的臨時憑證,用來換取 access token 和 refresh token。
鑒權服務器提供了一個類似這樣的接口:
https://www.xxx.com/exchange?code=&client_id=&client_secret=
需要傳入 code、client_id 以及 client_secret。驗證通過后,返回 access token 和 refresh token。一旦換取成功,code 立即作廢,不能再使用第二次。
為什么要引入一個一次性的 code?
先看流程圖:
這個 code 的作用是保護 token 的安全性。上一節說到,Implicit 方式下,token 是不安全的。這是因為在 4 這一步當中直接把 token 返回給應用。而這一步容易被攔截、竊聽。引入了 code 之后,即使攻擊者能夠竊取到 code,但是由於他無法獲得應用保存在服務器的 client_secret,因此也無法通過 code 換取 token。而 5 這一步,為什么不容易被攔截、竊聽呢?這是因為,首先,這是一個從服務器到服務器的訪問,黑客比較難捕捉到;其次,這個請求通常要求是 https 的實現。即使能竊聽到數據包也無法解析出內容。
有了這個 code,token 的安全性大大提高。因此,Oauth2.0 鼓勵使用這種方式進行授權,而 Implicit 方式則是在不得已情況下才會使用。
若有疑問,可以直接進以下公眾號提問。也可以直接發送 oauth2.0 獲取設計指南和偽代碼: