對于一些安全性要求高的系統或者請求一些受保護的資源時,我們要進行鑒權,以判斷此次請求是否是被允許的,這里我們就會用到Token機制。
Token是什么?為什么要使用Token?
Token是令牌的意思,一般在登錄系統、API認證、密保、邀請碼中被廣泛使用,它是由服務器端產生的。
Token工作流程大概是這樣:
調用方使用用戶名及密碼向服務器端進行請求認證;
若服務器端認證成功,則生成唯一的Token并返回給客戶端;
客戶端下次請求任何資源時都會把Token帶上,交給服務器端進行權限鑒證,以此來證明此次請求的合法性。
這種機制是不是和Session/Cookie很像?那為什么要用Token呢?原因很簡單:
Token具有無狀態性,適用于分布式系統,可在多個服務間共享; Token可避免CSRF攻擊; Token能避開同源策略的限制等。
同個Token只能使用一次的實現方案
1、
我們可以把Token作為Redis中的某個Key,同時設置TTL,當此Token使用過一次后就刪除Redis中對應的Key即可。
2、
一個Token原始數據(加密之前的數據)中
這種方法雖很安全,但考慮到RSA等加密也是要消耗CPU性能的,這塊需要綜合考慮。
以上就是我的觀點,對于這個問題大家是怎么看待的呢?歡迎在下方評論區交流~我是科技領域創作者,十年互聯網從業經驗,我了解更多科技知識!