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

zSy*_*sis 9 .net c# authentication web-services asmx

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

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

All*_*ice 9

这与我的问题非常相似:" 我们应该如何实施以授权客户使用我们的网络服务? "

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

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

  <system.web>
    <webServices>
      <protocols>
        <remove name="Documentation" />
      </protocols>
    </webServices>
  </system.web>
Run Code Online (Sandbox Code Playgroud)

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

客户端代码:

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

WebRef.Url = "url";
WebRef.Credentials = new System.Net.NetworkCredential("userid", "password");
Run Code Online (Sandbox Code Playgroud)

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

WebRef.Proxy = new WebProxy("url");
WebRef.Proxy.Credentials = new System.Net.NetworkCredential("userid", "password");
Run Code Online (Sandbox Code Playgroud)

  • 当然,不通过默默无闻发布WSDL是安全的.但是,https + basic auth +内置于Web服务代码本身的一些安全性并不是通过默默无闻的安全性.如果发现了URL,则它们将不具有所需的WSDL. (2认同)

Ste*_*dit 3

临时 SOAP 安全性有以下三种通用方法:

  1. 第一个是在每次调用时传递身份验证信息。
  2. 第二种是将其传入一次以接收会话 ID,然后在每次调用时传入该会话 ID。
  3. 第三种与第二种基本相同,只是使用cookie。

在这三种方法中,我推荐第一种方法,它不需要服务器维护状态,但由于缓存而可以同样快。