2012-10-30 60 views
17

我對REST API相當陌生,並且我意識到已經發布了很多問題。然而,細讀這些讓我更加困惑於如何處理這個問題。保護REST API和Slim Framework

我使用Slim Framework創建了一個REST API,我只是用它來傳輸數據。我不會使用用戶登錄或身份驗證,所以我相信要確保這一點,我只需要一個使用公鑰和私鑰的系統,但我不確定。

如果任何人有正確/最安全的方式來做到這一點,或任何教程/資源將是偉大的洞察力。任何幫助表示讚賞。

+0

洞察最安全的方式......做*什麼*?你想達到什麼目的?你想「保護它」。那是什麼意思?目標是什麼?你是否只允許訪問受信任的用戶?你想在傳輸中加密數據嗎?你想每個客戶端只允許使用一次嗎?等等...你說你想「確保這個」,但你不想使用認證。那麼你需要更具體一些,關於「確保這一點」意味着什麼。 – Cheeso

+1

該API將從不同的站點調用,但用戶不知道它在那裏,因爲它只是用於在後端檢索數據。我的目標是從代碼中安全地調用這個API並加密數據。 – Drew

回答

15

您可以使用SSL加密傳輸中的數據。

但SSL只是加密;服務器端ssl不會對客戶端進行身份驗證,也不會進行授權。你可以想到授權作爲回答問題是否允許來電者做他正在問的問題?身份驗證建立主叫方身份或身份驗證通常是執行授權的必要步驟。有時你不需要「整個身份」 - 你只需要確定一個特定的方面。例如,自動洗手間大門不需要知道你是誰,但只有當你是男性或女性才能確定身份時。同樣,一些服務不關心你是誰,如果您從特定網絡(IP白名單)呼叫,或者您攜帶特殊令牌,則它們將允許訪問。

爲了讓服務器授權和未授權的呼叫進行區分,你有一些選擇:

  • IP白名單。如果您知道將調用您的服務的應用程序或代理的IP地址,則可以在您的服務實現中指定該IP地址。該服務可以檢查傳入請求的IP並拒絕那些不在白名單上的IP。這是基於呼叫者地址的「隱式」授權。

  • 一個祕密令牌,應用程序在每次調用中提供。你說你不想做認證,但這是一種認證形式。你可以稱它爲「不記名記號」。任何擁有此令牌的人都可以獲得授權。在您的服務器中,您將檢查令牌的值並拒絕任何與衆所周知的值不匹配的調用。這與IP白名單非常類似,除了令牌被明確傳遞,並且與網絡地址沒有任何關係。

  • 令牌+密鑰對。這就像用戶名/密碼,但可用於驗證應用程序。使用它來提供應用程序本身的身份。如上所述檢查服務端。

  • 一個用戶名/密碼。驗證應用的用戶。

您可能希望將這些結合起來生成您想要的解決方案。換句話說,客戶端請求必須來自我的地址,並且需要擁有應用程序的令牌/密鑰和用戶的用戶名/密碼才能被視爲「已授權」。

+0

感謝Cheeso的出色反應。我需要一些時間才能實現所有這些,但這肯定會讓我走上正軌。 – Drew

+0

@Cheeso,不錯的總結。您是否有任何實現示例,想要開始使用自己的實現,因爲基本REST API已啓動並正在運行...... –