Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在.net中保护Web服务?_.net_Web Services_Security - Fatal编程技术网

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

如何在.net中保护Web服务?,.net,web-services,security,.net,Web Services,Security,我已经编写了一个简单的.NETWebService,我将把它托管在不同的服务器上,可能在不同的大陆上。我真的不知道。现在,我只有它的URL,我尝试使用webrequest和webresponse方法来访问web服务vai HTTP POST。现在,我想知道是否有任何方法可以确保Web服务访问的安全,这样就没有人可以利用它了 例如: 现在,这些是调用此Web服务所需的所有参数。好像现在,任何人都可以利用它。那么我怎样才能保证它的安全呢?尽管我计划获取SSL,但整个过程是从服务器到服务器,而不是从

我已经编写了一个简单的.NETWebService,我将把它托管在不同的服务器上,可能在不同的大陆上。我真的不知道。现在,我只有它的URL,我尝试使用webrequest和webresponse方法来访问web服务vai HTTP POST。现在,我想知道是否有任何方法可以确保Web服务访问的安全,这样就没有人可以利用它了

例如:


现在,这些是调用此Web服务所需的所有参数。好像现在,任何人都可以利用它。那么我怎样才能保证它的安全呢?尽管我计划获取SSL,但整个过程是从服务器到服务器,而不是从客户端到服务器?

您可以在web请求的授权标头中传递服务密钥(非常类似于Amazon WS),该密钥可以使用您选择的算法进行加密,然后在服务端解密,只有在密钥匹配的情况下才能继续执行

请参见以下URL中的第14.8节


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


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

通常是在WCF成为Microsoft之前(现在是3.0版)用于保护.NET web服务的。我已经在一个商业产品中成功地使用了它,它非常好,因为它基于W3C ws-*标准。如果您使用ApacheAxis,可以从.NET客户端(显然)和Java客户端成功地进行互操作。下载地址:


我们做了大量的Web服务,为了保护它们,我们只在请求对象中添加了用户名和密码。在您的情况下,您可以只为用户名和密码添加两个新参数,或者更简单地只添加一个参数并使用身份验证代码之类的东西,您可以根据需要使其变得复杂或简单


有些想法很简单,比如guid列表,它们是请求服务器IP地址加密的可接受传递密钥,因此身份验证代码只能与web服务验证的IP地址一起工作

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


成功登录时需要生成令牌。要生成令牌id,建议使用
RNGCryptoServiceProvider

谢谢,这很有道理。我还能做些什么使它更安全吗?如果来自客户端的请求是在SSL模式下完成的,那么这个请求也将在服务器到服务器的SSL模式下完成,或者我必须专门打开它吗?对不起,我问了这么多问题。谢谢。我相信您也需要SSL证书来进行服务器到服务器的通信。与加密授权头配对应该是您所需要的全部WCF。。。我想我可以看看。但我仍然只需要通过URL访问,这是我的限制。如果可以的话,请帮助我。任何联系都已足够。谢谢。MSDN上的WCF开发者中心位于。所有新的web服务开发都应该使用WCF而不是ASMX。我强烈建议不要考虑WSE!WSE已经被WCF取代,相当过时。除非你别无选择,否则不要使用WSE。这就是为什么我写了/before/WCF。。。最初的问题似乎是指传统的.NETWeb服务。当然,如果有选择的话,我也会推荐WCF。只是请小心提一下WSE——如果有人读到这篇文章决定使用它怎么办?这就是为什么我用如此严厉的措辞——“除非你别无选择”。我不想因为“它使用.ASMX文件”或“WCF太高级”或诸如此类的原因而碰上有人使用它。WSE已经过时,不应该被使用,至少不应该在任何重要的项目上使用。@john,@Guido:请原谅我的无知,但是WSE以什么方式失败呢?它不安全吗?@bnieland:WSE已过时,几乎不受支持,并已被WCF取代。几乎没有理由使用它。只有当我必须在WindowsServer2000上运行并且需要WS-Security时,我才会使用它。如果你因为某种原因不能使用WCF,那么就使用https。谢谢大家。。很高兴,很好。。谢谢你的建议。。但正如其他人所说,我也会尝试使用WCF,看看它是否对我有好处。否则,我可以随时使用你的建议。谢谢。您说过:您还可以创建一个令牌,并将此令牌ID作为参数传递给每个webmethod。如果我按照您的指导线在每个请求中传递令牌,那么我如何防止回复附加。攻击者还获取这些令牌并发送请求。指引我。谢谢