OAuth 2.0 授權碼認證

灰色v碰觸發表於2019-02-16

參考文章

組成成分

  • 使用者
  • 應用1
  • 應用2

流程

使用者在應用1瀏覽、使用的過程中,涉及到要使用應用2功能的時候,就產生了 oauth 認證!

以下具體步驟參考的是:Laravel passport OAuth 認證

A. 登入授權

應用1攜帶如下查詢字串:

response_type client_id redirect_uri scope state
code xxx http://app.com/callback auth

跳轉到應用2的登入授權介面,使用者輸入應用2的賬號、密碼進行登入,登入後彈出是否對應用1授權。

B. 生成授權碼

如果使用者選擇同意授權,那麼應用2將生成授權碼並攜帶授權碼跳轉回應用1提供的 redirect_uri。這個 redirect_uri 中可以做任意事情,比如儲存授權碼,後期再獲取 token,或者繼續認證步驟,通過授權碼獲取 token,這邊要注意的是授權碼的有效期!一般授權碼有效期都較短,10min 左右。

C. 獲取 token

之前都是採取連結跳轉的方式(Get 請求)執行操作,到目前的獲取 token 步驟後應使用 post 方式在服務端通過 curl 完成!!

應用1提供如下引數(redirect_uri 要和 A 步驟中的一致!!):

grant_type client_id client_secret redirect_uri code
authorization_code xxx xxx http://app.com/callback xxx

嚮應用2發起 post 請求獲取 token,應用2認證相關引數,通過後響應如下資料:

{
    token_type: `` , 
    access_token: `xxx` ,
    refresh_token: `xxx` , 
    expire: `YYYY-MM-DD HH:II:SS`
}

應用1獲取資料儲存到資料庫。

D. 呼叫

應用1呼叫應用2的 api,在應用1上提供應用2的服務!

應用1在請求頭上攜帶:

Authorization: token_type access_token

呼叫應用2的 api 獲取資料。

釋疑

get/post 請求方式是如何確定的??

get/post 請求方式由實現方確定,即:應用2。我上面舉的例子中是推薦採用的請求方式,實際請求方式應該根據實現方提供的開發文件確定!

如下欄位是如何獲取的??

client_id       應用id
client_secret   應用金鑰
redirect_uri    重定向 uri

// 一般還需要提供
app_name 應用名稱
app_url  應用網址
....等

應用1提前嚮應用2申請提供的

相關文章