代码之家  ›  专栏  ›  技术社区  ›  Mohit

如何在.NET中保护WebService?

  •  13
  • Mohit  · 技术社区  · 15 年前

    我已经编写了一个简单的.NET WebService,它将托管在不同的服务器上,可能位于不同的大陆上。我真的不知道。现在,我只有它的URL,我尝试使用webrequest和webresponse方法来访问那个web服务vai-http-post。现在,我想知道是否有任何方法可以保护WebService访问,以便没有人能够利用它?

    例如:

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

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

    5 回复  |  直到 10 年前
        1
  •  9
  •   Nick Allen    15 年前

    您可以在Web请求的授权头中传递一个服务密钥(很像Amazon WS),该密钥可以用您选择的算法加密,然后在服务端解密,并且只有在密钥匹配时才继续执行。

    请参阅以下URL中的第14.8节

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

        2
  •  1
  •   John Saunders Tony    15 年前

    不幸的是,由于使用了旧的ASMX Web服务技术,您没有很多选择。在互联网上用ASMX Web服务认证某人的唯一方法基本上就是“自己动手”。

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

        3
  •  1
  •   Guido Domenici    15 年前

    通常,在WCF之前,您用来保护.NET Web服务的是Microsoft的 Web Service Extensions (WSE) ,现在是3.0版。我已经成功地将其用于一种商用产品中,它非常好,因为它基于W3C WS-*标准。如果您使用Apache轴,那么可以很好地与.NET客户端(显然)进行交互操作,也可以从Java客户端进行操作。下载:

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

        4
  •  0
  •   Bob The Janitor    15 年前

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

    有些想法很简单,比如可以接受的guid列表,将密钥传递给请求服务器的加密IP地址,这样认证代码就只能与Web服务验证的IP地址一起工作。

        5
  •  0
  •   dreamcrash    11 年前

    您还可以创建一个令牌,并将这个令牌ID作为参数传递给每个WebMethod。您可以在hashtable中维护令牌,并在放弃会话后将其从hashtable中移除。

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