asmx web服务:客户端身份验证

时间:2009-07-07 13:40:17

标签: c# .net web-services authentication asmx

我有一个Web服务,其中包含一些我希望有点安全的方法。 这些数据实际上并非完全保密,但我仍然希望仅限访问那些使用存储在Web服务web.config文件中的特定用户ID和密码的人。 C#Windows服务客户端将每天或每周调用一次此Web服务。

任何人都可以发布一个如何做到这一点的简单示例吗?提前谢谢。

2 个答案:

答案 0 :(得分:9)

这与我的问题非常相似:"What should we implement to authorize clients to use our web service?"

我们最终没有发布WSDL,只通过https提供服务并要求basic authentication。如果您不能强制所有客户端使用https,请不要使用基本身份验证。

如果这是.net网络服务,那么这里是配置文件条目,以防止wsdl被发布。

  <system.web>
    <webServices>
      <protocols>
        <remove name="Documentation" />
      </protocols>
    </webServices>
  </system.web>

当您转到该页面时,如果您尝试从站点手动下载web.config,则会收到类似于您收到的消息的错误消息。正如Steven所指出的那样,这是通过默默无闻的安全性,并且不应该单独使用来保护您的Web服务。但是,当除了基本的auth + https之外还使用它时,它是一个不错的额外功能。

客户端代码:

要从客户端访问此Web服务,请以正常方式和调用代码添加Web引用(假设您的Web引用名为WebRef)。

WebRef.Url = "url";
WebRef.Credentials = new System.Net.NetworkCredential("userid", "password");

此外,您可能需要查看WebRef.PreAuthenticate以节省一些往返次数。请注意,如果你是公司代理人,那么你将有一个有趣的时间进行测试。通过WebRef

使用代理
WebRef.Proxy = new WebProxy("url");
WebRef.Proxy.Credentials = new System.Net.NetworkCredential("userid", "password");

答案 1 :(得分:3)

ad hoc SOAP安全性有三种常规方法:

  1. 第一种是在每次调用时传递身份验证信息。
  2. 第二种方法是将其传递一次以接收会话ID,然后在每次通话时传入。
  3. 第三个与第二个基本相同,只使用cookies。
  4. 在这三个中,我建议使用第一个方法,该方法不需要服务器维护状态,但由于缓存可以同样快。