2014-03-26 97 views
0

我是PHP新手:)。我正在用PHP創建一個REST API,供移動客戶端(Android和IOS)使用。目前,PHP網站(yii)允許用戶使用用戶名和密碼登錄(散列並存儲在數據庫中)。我想實現這一點的方式是,我可以有一個登錄REST api調用,用於對用戶進行身份驗證並生成一個令牌(一些隨機數或會話ID)並將該令牌的散列發送給客戶端。然後,客戶端可以每次在REST api調用時將該標記傳遞給http標頭,並且api方法將在每次調用時驗證這一點?REST API的驗證令牌PHP中的

現在,

  1. 我想知道是否有這種方法的任何缺點?
  2. 也有任何PHP的例子如何做到這一點?
  3. 此令牌如何確保安全性?有人可以嗅探這個令牌並將它發送到請求中,並且服務器仍然允許它嗎?或者假設我隨着時間過期令牌,手機應該再次進行認證以獲得新的令牌嗎?

回答

0

我的答案不會是唯一的答案,我相信你會在這個問題上得到很多反饋。

首先散列。我不會建議這樣做。在中間人攻擊等情況下,人們可以通過路由來攔截哈希。通常URL中的敏感信息是一個不好的主意。

爲什麼不使用普通會話?在第一次呼叫時授權...然後會話已經在服務器和呼叫者身上創建...這樣您可以確保接下來的請求得到授權。

用戶/服務/服務器可以簡單地引用創建的會話cookie,並通過這樣做進行驗證。這種方式更安全,不會暴露敏感信息。

And ..使用HTTPS,當然如果可能的話......否則這些信息也可以被攻擊。這一切都取決於你想要的安全級別。您可以堆疊安全層......但如果您通過線路發送關於貓的信息,這可能沒有意義:)

+0

好的。我如何在API中傳遞會話ID?有沒有在PHP的代碼示例? – appcoder

+0

那麼你的PHP API應用程序已經能夠創建會話...重要的是,使用API​​的應用程序能夠使用會話ID引用cookie。使用CURL請求,您可以使用cookie jar。談到這裏http://stackoverflow.com/questions/13020404/keeping-session-alive-with-curl-and-php –

+0

我可以使用我的移動客戶端的HTTP_COOKIE頭在每個請求中傳遞會話ID嗎? – appcoder