Access Token 機制詳解


  我們在訪問很多大公司的開放 api 的時候,都會發現這些 api 要求傳遞一個 access token 參數。這個參數是什么呢?需要去哪里獲取這個 access token 呢?

  access token 是在 Oauth2.0 協議中,客戶端訪問資源服務器時需要帶上的令牌(其實就是一段全局唯一的隨機字符串)。擁有這個令牌代表着得到用戶的授權。令牌里面包含哪些信息呢?答案是:

 

  哪個用戶  在什么時候  授權給哪個app  去做什么事情

 

  當然這些信息是不能直接從 access token 看出來的,而是存在平台方的數據庫中,平台可以用 access token 作為 key 去查詢出這些信息,然后驗證調用方是否有權限。 

  對於 Oauth2.0 不了解的讀者,如果想要深入一點的了解背后的設計思想,請看 簡單介紹 Oauth2.0 原理

 

  所以,在調用這些 api 之前,需要先獲取到 access token。獲取的方法分為三步:

  

  第一步,實現一個 api:

    GET /recieve_code?code=

  這個 api 接收一個 code 參數。至於接收到 code 之后做什么,在第三步介紹。在這一步,只需提供這個 api 的 url,並且可以在公網訪問,里面邏輯可以先不實現。

 

  第二步,當需要調用平台 api 的時候,在你的 app 中打開平台提供的一個授權界面(平台方的 sdk 通常會提供這一步的接口),並且,把第一步中提供的 url 傳給這個界面。

  這個界面打開后可能類似下面這樣:

  如果用戶同意執行此操作,就會輸入賬號密碼進行授權。授權通過后,平台就會自動調用第一步中提供的 url,並傳過來一個 code。

 

  第三步,使用 code 去兌換 access token。

  平台必定有一個 api,接收 code 為參數,返回一個 access token 和一個 refresh token。在第一步的 api 中去調用這個平台 api。並且將獲得的 access token 和 refresh token 保存在服務器上。到這里,就獲取到可用的 access token 了。

 

  然而事情到這里還沒完,是不是每一次需要調用平台的開放 api 的時候,都要重新獲取一次 access token 呢?答案是否定的。在第三步中獲取到的 access token 有一定的有效期,在過期之前可以一直重復使用。那么,access token 過期了之后怎么辦呢?

  首先,我們怎么知道 access token 已經過期?答案是在使用 access token 去訪問平台的開放 api 的時候,如果 access token 已過期,api 會報錯,返回一個 token 無效的錯誤。此時,我們應該用 refresh token 去刷新 access token。具體的做法是查找平台的文檔,找到刷新 access token 的 api,這個 api 必定需要 refresh token 作為參數。按照文檔去調用就可以了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM