【问题标题】:ASP.NET Web Service SecurityASP.NET Web 服务安全
【发布时间】:2009-07-28 19:53:20
【问题描述】:

我过去曾构建过公开使用或使用 Windows 身份验证的 ASP.NET Web 服务。我现在需要构建一个使用 SOAP 1.1 协议的 Web 服务,并且需要使用来自调用者的用户名和密码来保护它。

WCP 的setting up the infrastructure 似乎对于一两个 Web 服务来说太过分了。还有其他建议吗?我也在考虑使用 ASP.NET 4.0 Beta,如果有人对此场景进行过探索,了解您的意见会很有帮助。

提前感谢您的建议。

【问题讨论】:

    标签: asp.net web-services soap asmx


    【解决方案1】:

    简单的方法是创建一个特殊的标头,其中包含每次调用的身份验证信息,并以这种方式对用户进行身份验证/授权

    以下是一些示例代码: http://aspalliance.com/805_Soap_Headers_Authentication_in_Web_Services

    请注意,通过这种方式您发送的是明文用户名和密码,因此您可能希望使用 ssl 或使用某种摘要式身份验证

    【讨论】:

    • 如果消费客户端使用了一个库,比如PHP SOAP,他们是否能够通过该库轻松写入头部?
    • 我没有在 PHP 中做过,但我认为只要库支持自定义标头,应该没有问题
    • 我在 .NET 4.0 中这样做了,有 2 个语法错误 1) newlocalhost 之间应该有一个空格: localhost.AuthSoapHd objAuthSoapHeader = newlocalhost.AuthSoapHd(); 2) 调用 web 方法需要将 spAuthenticationHeader 作为参数传递
    【解决方案2】:

    有不同的方法可以做到这一点。一个可能是启用对一组特定 IP 的访问。如果 IP 与列表之一不匹配,那么您可以轻松拒绝方法级别的调用。

    否则,您可以创建另一个返回令牌的方法,然后让所有相关方法期望该令牌返回以处理请求。

    【讨论】:

      【解决方案3】:

      使用 SSL。强制使用您的网络服务的每个人都使用 https。

              //Check for Secure Channel: HTTPS
              if (!Context.Request.IsSecureConnection) 
                  return "The HTTP Connection must use Secure Sockets (HTTPS)";
      

      【讨论】:

        猜你喜欢
        • 2021-11-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-04
        • 1970-01-01
        相关资源
        最近更新 更多