回覆列表
  • 1 # 網路圈

    對於一些安全性要求高的系統或者請求一些受保護的資源時,我們要進行鑑權,以判斷此次請求是否是被允許的,這裡我們就會用到Token機制。Token是由伺服器端簽發給客戶端的,出於效能開銷的考慮,一般情況下的Token在一段時間範圍內是可以反覆使用的,如果你想實現同個Token只能使用一次,也是有方案的。

    Token工作流程大概是這樣:

    呼叫方使用使用者名稱及密碼向伺服器端進行請求認證;

    若伺服器端認證成功,則生成唯一的Token並返回給客戶端;

    客戶端下次請求任何資源時都會把Token帶上,交給伺服器端進行許可權鑑證,以此來證明此次請求的合法性。

    這種機制是不是和Session/Cookie很像?那為什麼要用Token呢?原因很簡單:

    Token具有無狀態性,適用於分散式系統,可在多個服務間共享;

    Token可避免CSRF攻擊;

    Token能避開同源策略的限制等。

    同個Token只能使用一次的實現方案

    1、藉助Redis來控制Key失效時間(實施成本低,推薦此方法)

    2、Token重新簽發(存在效能問題)

    一個Token原始資料(加密之前的資料)中應包含一個時間戳,當伺服器端拿到客戶端傳遞過來的Token時先判斷是否合法,若合法則解析Token,拿出裡面的資料,將時間戳改為當前,然後重新計算生成新的Token並返回給客戶端。

    這種方法雖很安全,但考慮到RSA等加密也是要消耗CPU效能的,這塊需要綜合考慮。

  • 2 # 瘋狂架構師

    不使用第三方儲存,且還要限制只能夠使用一次,這個使用場景有點苛刻,那通常就只能夠放在本地記憶體或本地硬碟了,這個對應用的可擴充套件性就有了較大的限制,除非特別有必要,這種方案不推薦。

  • 中秋節和大豐收的關聯?
  • 大家覺得英雄聯盟和GTA5,哪個更能代表美國遊戲的製作水平?