我閱讀有關API的最佳實踐此文檔如果所有憑證都存儲在客戶端上,REST身份驗證如何安全處理?
http://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api
我已經建立了簡單的自定義之前的REST API,我覺得我已經成功地保護他們。之前,我在服務器上生成了客戶端的身份驗證「令牌」或護照,並將其打印在頁面上。這個想法是,客戶端既不能猜測也不能輕易地反向設計該令牌的生成方式,因爲生成它的函數對客戶端來說是不可見的。這是糟糕的用戶體驗,因爲令牌會在一段時間後過期,導致頁面過期並無法向API發出新請求。
但是,我仍然不確定在服務器與服務器「輕微分離」的情況下,這種情況會如何發生,因爲Web服務器沒有爲每個請求提供頁面。所以客戶需要事先了解一些關於認證的知識。
我覺得這種模式會迫使我在客戶端生成或存儲API認證細節,任何人都可以看到。我發現這種做法是不安全的,我想避免這種做法,但鑑於我知道的信息(我承認這種信息很稀疏),這是不可能的。
我在API安全性和身份驗證方面缺少這種模式?
這是一個很好的答案,只是要小心獲取JWT處理的最新庫,以避免像[this]這樣的問題(https://auth0.com/blog/critical-vulnerabilities-in-json-網絡令牌庫/)。 – TheGreatContini
感謝您提供流程。我想我現在更徹底地理解這個過程。我仍然對流程的第一步感到困惑,它是「客戶端呈現它的憑據」。我提到的文章使用基本的HTTP驗證,但我知道其他方法存在,如來自OAuth方法的持票人令牌。客戶何時獲得這些憑據,爲什麼我無法從客戶端對其進行逆向工程以執行攻擊?如果客戶端有祕密(或其版本),爲什麼我不能使用憑證來執行攻擊? –
@MattWalther,在每個客戶服務器應用程序中都有兩個實體:客戶端**,願意證明服務器的身份**以及需要驗證證明的服務器**。在步驟1中,客戶**知道**憑證。這些只是......某些事情,例如用戶名和密碼,api密鑰,令牌...等等。但流量從那裏開始。客戶擁有一個祕密,證明他是誰或是什麼。客戶在註冊階段獲得憑證,並且對您已知的**進行反向工程是毫無價值的。 – MaVVamaldo