2017-07-19 60 views
1

我正在開發一個項目,我需要集成一個API。 API的網站要求每個對其API的請求都由授權令牌授權。 我的問題是如何安全地保存授權令牌並在到期後重新生成令牌,以便我的網站用戶能夠使用Access令牌來處理他們的請求。 令牌在2小時內過期 以下是我的獲取授​​權令牌和回覆的請求。從PHP網站獲取授權令牌PHP

response = unirest.post("https://webapisite.com/merchant/access", 
headers={ "Accept": "application/json" }, 
params={ "apiKey": "my_api_key, "secret": "my_secret" }); 

我會得到以下json響應

{ 
    "status": "success", 
    "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTQwLCJuYW1lIjoic2F2YW5hIHNtYXJ0c2F2ZSIsImFjY291bnROdW1iZXIiOiIiLCJiYW5rQ29kZSI6Ijk5OSIsImlzQWN0aXZlIjp0cnVlLCJjcmVhdGVkQXQiOiIyMDE2LTEyLTA4VDEwOjM4OjE5LjAwMFoiLCJ1cGRhdGVkQXQiOiIyMDE3LTA2LTE0VDEzOjAxOjQ5LjAwMFoiLCJkZWxldGVkQXQiOm51bGwsImlhdCI6MTQ5ODMzNTE2NSwiZXhwIjoxNDk4MzQyMzY1fQ.WojvkYOC2j6XTUfg_E4WQkxQChPUyCgYUCIKaW83YXA", // a valid merchant token 
    "config":{} 
} 
+0

這裏的標準方法是將令牌保存到用戶的會話或表中的數據庫中,並將其與用戶帳戶一起鏈接到有效期以便在需要時可以刷新 –

回答

0

它總是更好地保存令牌DB並存儲在會話中。 隨着每個請求,您可以從會話中獲取令牌並通過DB存儲會話跟蹤會話活動。 基本上這種東西是分項目的流程,所以根據項目的需要和流程的安全性方面我們可以做到。

0

您應該保存此令牌DB。 在一個表中,保存訪問令牌,授權令牌和過期日期。 如果您願意,您可以保存多個記錄,但是如果您只有一個授權令牌,則一條記錄就足夠了。

在每次調用該API之前,都要檢查數據庫中可用的訪問令牌是否仍然有效,如果不是,則必須通過該驗證令牌更新訪問令牌。

我無法理解您使用此任務的語言。 如果使用javascript,您可以爲後端發佈帖子,要求獲取最新的有效標記。

希望有所幫助。

+0

非常感謝,請使用PHP和unirest –

+0

然後,您可以在php中使用魔術方法__call()並在API中檢查令牌是否仍然有效,如果不是隻是請求一個新的令牌。 結束更新令牌的過程後,被調用的函數將執行並且現在使用新的新令牌執行。 –

1

也許像這樣的用例最常用的標準是OAuth 2.0

OAuth是一種廣泛認可的HTTP協議,用於在成功認證後向客戶端發佈令牌(另請參閱:「ServerFault上的What is the difference between authentication and authorization?」)。它提供了不同的「流量」來獲取令牌,最適合您的情況可能是「Resource Owner Password Credentials Grant」流量。然後客戶可以使用賦予它們的令牌來製作實際的API請求。

存儲令牌通常在數據庫中完成。在真正的無狀態應用程序中,JSON Web Tokens可以消除在服務器端存儲令牌的需要。