2017-07-27 63 views
0

對於我的項目,我實現了使用承載令牌的OAuth2身份驗證框架。JWT訪問令牌安全注意事項

從快速搜索來看,JWT令牌看起來像是今天持有者令牌的主流選擇。

如果我使用不編碼任何信息的「啞」標記,我會將此標記與所有相關參數(標記的用戶,發行日期,到期日期等)一起存儲在數據庫中。

從智威湯遜的文檔,我明白,我可以實現此流程避免這種開銷:

  1. 用戶提供支持的方法
  2. 認證服務生成JWT令牌和下面的參數編碼爲它一個驗證:用戶ID,使用的驗證方法,發行日期,到期日期
  3. 驗證服務加密並簽署令牌
  4. 令牌發送給用戶以供後續使用

加密步驟是可取的,因爲我不想公佈用戶ID。

我的理解是,如果我使用上述方法,我可以避免存儲訪問令牌和用戶之間的映射,完全依賴於令牌提供的用戶ID信息。

這種方法讓我感到困擾的是,看起來我沒有選擇「撤銷」訪問令牌。換句話說,即使訪問令牌會被破壞,我也無法將其禁用(除非我知道確切的受損令牌,事實並非如此)。

這是一個真正的擔憂,或者我只是想念一些事件?如果這種擔憂是真實的,我該如何解決它?

+1

你說得對,智威湯遜有效期到期,你不應該存儲它。你可以建立一個撤銷清單,但通常的做法是讓令牌過期並根據需要調整到期期限。請參閱https://stackoverflow.com/questions/37507714/invalidating-client-side-jwt-session – pedrofb

回答

1

只要過期時間有效,訪問令牌自包含並且有效。在實際規範中沒有關於使它們失效的規範。根據您需要的安全級別,您可以調整令牌的驗證時間,從較少的幾分鐘到幾小時。通常,驗證時間設置爲一個小時。

如果您需要更高級別的安全性,則可以使用引用令牌。參考標記不帶任何信息,它們是簡單的字符串。但是,服務器(或者消費這些令牌的人)必須聯繫令牌提供者以交換實際迴應內容的引用令牌。但是,如果這些令牌受到威脅,它們可以被撤銷。

欲瞭解更多信息和一些關於如何克服參考令牌缺點的建議(如反向信道通信/向令牌提供商額外往返),請參閱此link。請讓我知道,如果你有任何問題。

-Soma。