2009-05-06 111 views
13

我寫了一個簡單的.NET web服務,我將在不同的服務器上託管,可能在不同的大陸上。我不知道。現在,我只有它的URL,我嘗試使用webrequest和webresponse方法來訪問該Web服務。現在,我想知道是否有任何方法來保護Web服務訪問,以便沒有人可以利用它?如何在.net中保護web服務?

例如:

http://example.com/Verify/Verification.asmx/Verify?AccountNumber=3223&ProductName=876

現在,這些都調用此WebService所需的參數。就像現在一樣,任何人都可以利用它。那麼我怎樣才能保證它的安全?雖然,我打算獲得SSL,而整個事情是從服務器到服務器發生的,而不是從客戶端到服務器?

+0

感謝大家。快樂編碼。 – Mohit 2009-05-06 13:09:21

回答

9

您可以在web請求的授權頭這可能與你的選擇,然後在服務端解密,只有繼續執行,如果一個算法進行加密,通過服務密鑰(很像亞馬遜WS)重點在以下網址

http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

+0

謝謝,這很有道理。有沒有其他的事情,我可以做,使其更安全?如果來自客戶端的請求在SSL模式下完成,那麼這個請求也將在服務器之間通過SSL完成,還是需要專門打開它?請原諒我,問了這麼多問題。 謝謝。 – Mohit 2009-05-06 12:53:18

+1

我相信你也需要SSL證書來進行服務器到服務器的通信。與加密的授權頭配對應該是你所需要的全部 – 2009-05-06 13:01:56

1

不幸的是匹配

見14.8節,你沒有太多的選擇,因爲你已經使用過的舊ASMX Web服務技術。使用ASMX Web服務在互聯網上驗證某人的唯一方法基本上等於「自己動手」。

如果我不得不這樣做,我會使用WCF和給自己一些選擇。如果我不能使用WCF,那麼我會創建一個自定義HTTP頭來傳遞用戶名和密碼(通過SSL!),並在服務器上對其進行身份驗證。或者,我會在客戶端上使用證書,並要求將它們發送到服務器。 IIS甚至可以將客戶端證書轉換爲服務器上的Windows身份。

+0

WCF ... 我想我可以看看那個。但仍然需要通過URL訪問,這是我的限制。如果可以,請你幫助我。任何鏈接都足夠了。 謝謝。 – Mohit 2009-05-06 12:56:32

+0

MSDN上的WCF開發人員中心位於http://msdn.microsoft.com/WCF/。所有新的Web服務開發都應該使用WCF而不是ASMX。 – 2009-05-06 13:00:27

1

你用什麼通常以確保.NET Web服務WCF是微軟的Web Service Extensions (WSE)之前,現在3.0版本。我已經成功地將它用於商用產品,而且它基於W3C ws- *標準,因此非常好。如果您使用Apache Axis,可以成功地與.NET客戶端(顯然)進行互操作,但也可以從Java客戶端進行互操作。下載:

http://www.microsoft.com/downloads/details.aspx?FamilyID=018a09fd-3a74-43c5-8ec1-8d789091255d&displaylang=en

+0

我強烈建議不要反對WSE! WSE已經過時,已被WCF取代。除非你沒有選擇,否則不要使用WSE。 – 2009-05-06 13:01:31

0

我們做了相當多的網絡服務,並確保他們,我們只是增加了一個用戶名和密碼,以我們的請求對象。在你的情況下,你可以爲用戶名和密碼添加2個新參數,或者更簡單地添加一個,並使用類似認證碼的東西,你可以根據需要製作複雜或簡單的參數。

一些概念簡單的東西一樣,是可以接受的通鍵來請求的服務器IP地址的加密,以便驗證碼只能使用Web服務驗證了IP地址的作品GUID的列表。

0

您還可以創建一個令牌,並通過這個tokenid作爲參數傳遞給每一個的WebMethod。您可以在哈希表中維護該令牌,並在會話被放棄後從哈希表中移除該令牌。

令牌需要成功登錄後產生。要生成令牌ID,我推薦使用RNGCryptoServiceProvider