如何在.net中保护Web服务?

时间:2009-05-06 12:42:11

标签: .net web-services security

我编写了一个简单的.NET Web服务,我将托管在不同的服务器上,可能在不同的大陆上。我真的不知道。现在,我只有它的URL,我尝试使用webrequest和webresponse方法访问该网络服务vai HTTP POST。现在,我想知道有没有办法保护webservice访问权限,以便没有人可以利用它?

例如:

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

现在,这些是调用此Web服务所需的所有参数。好像现在,任何人都可以利用它。那我怎样才能让它安全?虽然,我计划获得SSL,但整个事情是从服务器发生到服务器,而不是从客户端到服务器?

5 个答案:

答案 0 :(得分:9)

您可以在Web请求的授权标头中传递服务密钥(非常类似于Amazon WS),该服务密钥可以使用您选择的算法进行加密,然后在服务端解密,并且只有在执行时才继续执行关键比赛

请参阅以下网址中的第14.8节

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

答案 1 :(得分:1)

不幸的是,由于您使用了旧的ASMX Web服务技术,因此您没有太多选择。通过互联网对使用ASMX Web服务的人进行身份验证的唯一方法基本上就是“自己动手”。

如果我必须这样做,我会使用WCF并给自己一些选择。如果我无法使用WCF,那么我将创建一个自定义HTTP标头来传递用户名和密码(通过SSL!),并在服务器上对它们进行身份验证。或者,我会在客户端上使用证书并要求将它们发送到服务器。 IIS甚至可以将客户端证书转换为服务器上的Windows身份。

答案 2 :(得分:1)

通常,在WCF之前用于保护.NET Web服务的是Microsoft的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

答案 3 :(得分:0)

我们提供了大量的Web服务并为了保护它们,我们只是在我们的请求对象中添加了用户名和密码。在您的情况下,您可以为用户名和密码添加2个新参数,或者更简单地只添加一个并使用类似身份验证代码的内容,您可以根据需要进行复杂或简单的操作。

一些想法很简单,就像一个GUID列表,它是可接受的传递密钥,用于加密请求服务器的IP地址,这样验证代码只能与Web服务验证的IP地址一起使用。

答案 4 :(得分:0)

您还可以创建一个令牌并将此tokenid作为参数传递给每个web方法。您可以在哈希表中维护令牌,并在会话放弃后从哈希表中删除。

成功登录后需要生成令牌。要生成令牌ID,建议您使用RNGCryptoServiceProvider