2012-04-25 131 views
1

我打算創建一些簡單的REST Web服務以供其他一些應用程序使用(所有內部應用程序,不面向Internet)。由於某些原因,應用程序應該使用SSO(Windows,NTLM或其他)。我遇到的問題是如何在Web服務中進行身份驗證。PHP:創建和使用REST和身份驗證

調用Web服務的應用程序不知道用戶的密碼,所以我對如何在沒有用戶登錄的情況下對REST進行身份驗證時感到迷惑不解?例如。避免基本身份驗證

我想避免因用戶簡單而無法登錄,也不必在我的應用程序中處理密碼。我有什麼選擇?我錯過了明顯的東西嗎?

這是一個解決方案: 創建令牌,將其傳遞到服務並將其存儲在數據庫中。 Web服務檢查數據庫中是否存在令牌。 (到期處理?)

回答

1

正如您所提到的,這個問題的最常見解決方案是基於簡單密鑰或令牌的身份驗證。這就是很多谷歌服務(例如地圖)的工作方式。您只需在服務提供商處爲每位消費者生成一個密鑰,將其存儲在數據庫中,並驗證所有呼叫都通過了有效密鑰。

更復雜的選項是HMACOAuth驗證。考慮到您的情況,即僅在您的Intranet內提供服務,我會說保持簡單並使用單個密鑰身份驗證。

在上述情況下,我看不到處理過期的必要。不過,如果你想實現它,那麼你可以

  • 每個客戶的要求,在您的回覆請求生成服務器
  • 上的時間戳基於令牌,還包括該令牌
  • 客戶端應該在後續請求中同時使用靜態API密鑰和動態令牌
  • 服務器應檢查令牌的生存期並根據需要接受/拒絕請求。
+0

HMAC聽起來很有趣。因此,我可以發送用戶名作爲消息(以純文本形式),並檢查該純文本用戶名的授權,例如使用LDAP,因爲密鑰是祕密的,所以保證用戶名不是「欺騙」的。例如。在Web服務中創建相同的HMAC並與接收到的進行比較。 – 2012-04-25 10:26:32