2012-11-20 47 views
0

我有一個Web服務,需要根據調用者的ID設置結果。確定調用Web服務的用戶

這是很有誘惑力定義接口的服務器上爲:

public String[] getUserLogFile(int userId){ 
    return logDAO.getLogs(userId); 
} 

在日誌中,Web服務返回一個用戶ID。客戶端可以在未來呼叫中包含此用戶標識。但是,如果客戶端設置了自己的userId,則調用者可以嘗試其他userId。這提出了安全問題。

什麼是識別Web服務調用者的最佳方法?服務器使用Java。客戶端可以是iPad,.Net,Android等。

謝謝。 J.

+0

只要有客戶端設置使用Id提供密碼。 –

+0

這是廣泛討論一個問題的方法。你可能想做一些研究,試驗一些代碼,然後回到SO,如果你遇到問題。但問題的關鍵是你需要來電者提供一種證明他們是誰的證件 - 無論是密碼散列,公共證書,還是某種生物特徵。等等。你在使用什麼技術? – Perception

+0

用戶標識應該是一個會話變量,並且永遠不會受到攻擊者控制 – rook

回答

1

一個簡單而有效的安全策略是使用SSL保護您的Web服務,然後在每次調用時傳遞一個basic authentication header。此設置的SSL部分是關鍵。客戶端將包括,在每個呼叫,所述形式的授權首標:

授權:基本QWxhZGluOnNlc2FtIG9wZW4 =

的編碼的字符串是用戶名和密碼的級聯,基部64編碼

Base64(username:password) 

這需要照顧客戶方的責任。在服務器端,您需要檢查授權標頭的所有傳入呼叫。如果存在,解碼它,分割用戶名和密碼,並使用這兩條信息驗證請求。通常在用戶身份驗證時爲用戶創建安全主體,其中包含有關用戶及其角色(或應用程序授權)的基本信息。爲了提高效率,這項工作通常在網頁過濾器中完成。我建議這對於您自動完成大量的服務器端任務以下庫: