2009-07-07 114 views
9

我有一個Web服務,有一堆我希望有點安全的方法。 這些數據並非真正的祕密,但我仍然希望僅限使用存儲在Web服務web.config文件中的某些用戶標識和密碼的用戶訪問。 C#Windows服務客戶端將每天或每週調用一次該Web服務。asmx網絡服務:客戶端身份驗證

任何人都可以發佈一個簡單的例子,我如何做到這一點?提前致謝。

回答

3

一般有三種方法特設SOAP安全:

  1. 首先是通過與每個呼叫的認證信息。
  2. 第二種方法是將其傳入一次以接收會話ID,然後在每次調用時傳入該會話ID。
  3. 第三個與第二個基本相同,只使用cookie。

三者之中,我推薦的第一方法,該方法不需要服務器來保持狀態,但同樣由於緩存一樣快。

+0

通過會話ID,您是指基於令牌的安全性嗎?那就是我通常所說的。 此外,「第一種方法」可能會大不相同,完全無效,這取決於他如何設置它。即沒有使用HTTPS的基本身份驗證,由於登錄名和密碼以純文本形式發送,所以無價值。 – 2009-07-07 14:13:43

+0

排序,雖然它可以像一個GUID一樣簡單。重要的是它大而且隨機,所以它不會受到影響。您不需要以純文本發送任何內容。例如,您可以調用GetChallenge來接收GUID,然後調用LoginWithResponse,傳遞該GUID以及明文帳戶名稱和GUID,帳戶和密碼串聯的哈希。或者,當然,您可以使用HTTPS,從另一個方向解決它。 – 2009-07-07 20:21:28

9

這是非常相似,我的問題:"What should we implement to authorize clients to use our web service?"

我們最終沒有發佈WSDL和只能通過HTTPS投放了服務,並要求basic authentication。如果您無法強制所有客戶端使用https,請勿使用基本身份驗證。

如果這是一個.net Web服務,那麼這裏是配置文件條目,以防止發佈wsdl。

<system.web> 
    <webServices> 
     <protocols> 
     <remove name="Documentation" /> 
     </protocols> 
    </webServices> 
    </system.web> 

當你轉到這個頁面,你會收到類似,如果你試圖從一個站點手動拉下一個web.config你會得到消息的錯誤消息。正如Steven指出的那樣,這是通過默默無聞的安全性,本身不應該被用於以保護您的Web服務。但是,除了使用基本的auth + https之外,它還有一點不錯。

客戶端代碼:

要通過客戶端訪問該Web服務,添加Web引用以正常的方式和調用代碼(假設你的Web引用名爲WebRef)。

WebRef.Url = "url"; 
WebRef.Credentials = new System.Net.NetworkCredential("userid", "password"); 

另外,您可能需要查看WebRef.PreAuthenticate以保存一些往返行程。只是被警告說,如果你在公司代理的背後,你將會有一段快樂時光。通過WebRef使用代理

WebRef.Proxy = new WebProxy("url"); 
WebRef.Proxy.Credentials = new System.Net.NetworkCredential("userid", "password"); 
相關問題