2009-05-06 151 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