簡體   English   中英

如何安全處理Rest API用戶身份驗證?

[英]How to handle Rest API user authentication securely?

在過去的幾個月中,我一直在為我工作的公司開發Web應用程序的Rest API。 端點提供數據,例如交易歷史記錄,用戶數據和支持憑單數據。 但是,我一直遇到一個似乎總是使我退縮的問題。

我似乎一直遇到的問題是如何安全處理Rest API的用戶身份驗證? 所有數據都將通過SSL連接發送,但是我當中有一部分人對可能出現的潛在安全問題抱有幻想。 目前,當客戶端嘗試登錄時,客戶端必須提供用戶名或電子郵件地址,以及登錄端點的密碼(例如,“ / api / login”)。 連同此信息一起,必須通過發送登錄憑據的請求的標頭提供瀏覽器指紋。 然后,API驗證指定的用戶是否存在,檢查提供的密碼是否正確,並將指紋存儲在數據庫模型中。 要訪問API中的任何其他終結點,必須先登錄才能獲得有效的令牌以及有效的瀏覽器指紋。

我一直在使用瀏覽器指紋來防止令牌劫持,並確保使用用於登錄的同一設備來發出請求。 但是,我注意到這種情況適得其反。 我用來生成瀏覽器指紋的客戶端庫並不總是准確的。 有時,庫會完全吐出另一個指紋。 由於不同的指紋未被API識別為有效指紋,因此這導致某些客戶端請求失敗。 我想跟蹤使用什么設備向API發出請求。 在保護令牌免遭劫持的同時,是否有更一致的方法?

當想到上一個問題時,還會想到另一個問題。 如何將身份驗證令牌安全地存儲在客戶端上,或者以某種方式使某人難以通過諸如xss-attack之類的惡意手段來獲取令牌? 我知道在基於瀏覽器的客戶端上設置嚴格的內容安全策略可以有效地防御xss攻擊。 但是,我仍然對將令牌存儲為cookie或本地存儲感到疑惑。

我知道oauth2通常是用戶身份驗證的一個很好的解決方案,並且我已經考慮過使用它來處理此問題。 雖然,我正在使用Flask編寫API,並且還在使用JSON Web令牌。 就目前而言,在使用oauth進行身份驗證時,Flask的oauth2實現無法使用JWT作為訪問令牌。

這是我不得不處理此問題的第一個大型項目,我不確定該怎么做。 任何幫助,建議或批評都將受到贊賞。 我現在需要幫助。

將API網關放在您的API之前,您的API網關是公開的(即在DMZ中),而實際的API是內部的。

你可以看看孔..

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM