2016-01-12 188 views
2

我有一個基於PHP Slim Framework開發的非常簡單的PHP API。它只做一些SQL查詢並在我調用它時返回一個JSON對象。我通過CURL在另一個網站上訪問這個API。對簡單的PHP RESTful API服務進行身份驗證

我的問題是:由於API的URL基本上是公開的,那麼確保它的最佳方式是什麼?我的第一個想法是HTTP基本身份驗證,這將很容易,我可以通過HTTP標頭。但是,我認爲只要沒有HTTPS連接,它就不是很安全(因爲網站會以純文本的形式將用戶名+密碼傳遞給API)。此外,我將不得不在我的網站上的PHP代碼中存儲憑據,我認爲這並不是最佳選擇。

我發現的下一個解決方案是基於標記的身份驗證,它具有無需對每個請求進行授權但可能更難以實現的優勢。此外,我還沒有任何經驗。

另外我讀了OAuth/OAuth2是要走的路。

問題是:我打算很快在移動應用程序上使用相同的API。

任何提示?謝謝!

+1

大多數人都使用OAuth/OAuth2用戶,但你總是可以通過編寫自己的令牌驗證啓動,並要求令牌將與API頭一起發送。你可以檢查它的存在,然後相應地驗證它。使用令牌認證並不複雜。只需要一段時間,然後坐下來,無論你決定實施什麼。緩慢地編碼,直到你把所有的頭都包裹起來。如果您希望移植到移動應用程序,我肯定會推薦使用令牌身份驗證。 –

+0

很感謝。所以OAuth =基於令牌的正確?我實際上閱讀了很多關於它的內容,很多人也提出這個建議。我想我只是沒有完全得到簽署請求的機制(例如在應用程序中)並在安靜的api上進行身份驗證。 – Mike

+0

嗨,你可以看看我的例子,使用slim3的JSON Web令牌認證https://github.com/letsila/slim3-jwt-auth-example – Tsilavina

回答

0

您可以使用WS-Security,儘管它是爲SOAP API而設計的,但它也適用於REST API。它基本上是一種基於令牌的認證,在服務器端有一個臨時令牌和一個隨機文件。

如果您正在查找示例,例如Symfony2 bundle,您有一些在PHP中實現此功能的庫。

WS-Security是HTTP Basic Auth之間的中間地帶 - 這是沒有HTTPS的安全問題 - 和OAuth--實現起來可能更復雜。

+0

沒有這樣的事情,REST的WS-Security –

+0

As由O'Reilly在這裏陳述:http://www.xml.com/pub/a/2003/12/17/dive.html; 「WSSE是一系列Web服務的開放安全規範,特別是SOAP Web服務,但是,用戶名令牌算法不是特定於SOAP的;它可以很容易地適應在HTTP認證框架中工作。」它確實最初是一個SOAP擴展,但這並不意味着它不能應用於REST Web服務。 –

0

您可以使用此slim-jwt ,它會提供一個完整的implamtation的智威湯遜,你可以使用它作爲middelware

+0

你提到**的實現需要** HTTPS,而OP明確表示他需要通過HTTP使用這個。 –

+1

您可以通過添加這個 「secure」=> false來允許http連接, 在您的中間件初始化 –