我编写了一个简单的.NET Web服务,我将托管在不同的服务器上,可能在不同的大陆上。我真的不知道。现在,我只有它的URL,我尝试使用webrequest和webresponse方法访问该网络服务vai HTTP POST。现在,我想知道有没有办法保护webservice访问权限,以便没有人可以利用它?
例如:
http://example.com/Verify/Verification.asmx/Verify?AccountNumber=3223&ProductName=876
现在,这些是调用此Web服务所需的所有参数。好像现在,任何人都可以利用它。那我怎样才能让它安全?虽然,我计划获得SSL,但整个事情是从服务器发生到服务器,而不是从客户端到服务器?
答案 0 :(得分:9)
您可以在Web请求的授权标头中传递服务密钥(非常类似于Amazon WS),该服务密钥可以使用您选择的算法进行加密,然后在服务端解密,并且只有在执行时才继续执行关键比赛
请参阅以下网址中的第14.8节
答案 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客户端进行互操作。下载地址:
答案 3 :(得分:0)
我们提供了大量的Web服务并为了保护它们,我们只是在我们的请求对象中添加了用户名和密码。在您的情况下,您可以为用户名和密码添加2个新参数,或者更简单地只添加一个并使用类似身份验证代码的内容,您可以根据需要进行复杂或简单的操作。
一些想法很简单,就像一个GUID列表,它是可接受的传递密钥,用于加密请求服务器的IP地址,这样验证代码只能与Web服务验证的IP地址一起使用。
答案 4 :(得分:0)
您还可以创建一个令牌并将此tokenid作为参数传递给每个web方法。您可以在哈希表中维护令牌,并在会话放弃后从哈希表中删除。
成功登录后需要生成令牌。要生成令牌ID,建议您使用RNGCryptoServiceProvider
。