安全内部网络上的REST或SOAP WCF服务无SSL

时间:2014-03-06 11:58:34

标签: asp.net web-services wcf rest soap

我写的服务有问题。

我们目前拥有一个托管在内部安全网络上的网络应用程序。

现在需要提供一项服务,该服务公开我们的Web应用程序业务功能,供客户端使用,以便创建本机平板电脑应用程序。

移动设备将使用VPN进入网络。要访问我们的webapp,用户通常需要使用用户名和密码。即。没有SSL。用户名和密码存储在自定义设置的数据库中(没有ASP成员资格等)。

现在,我已经提出缺乏SSL作为一个问题,但这已被击落,负责此类问题的人认为进入内部网络所需的安全性已足够。

我意识到这意味着应用程序对来自网络内部但在应用程序用户组之外的内部用户恶意行为开放

所以,现在在WCF中创建服务时会出现问题。没有SSL的身份验证似乎非常繁琐。我确实找到了:

[Yaron Naveh的ClearUsernameBinding] [1] http://webservices20.blogspot.co.uk/2008/11/introducing-wcf-clearusernamebinding.html

我觉得这就要解决我的所有问题,直到我意识到我必须改变我用json提供RESTful服务的计划,我现在必须使用SOAP。

尽管如此,我还是很好,直到我意识到由于数据包附带的信封而导致SOAP出现带宽问题。这让我很担心,因为这是一项超过3g的移动应用所消耗的服务,并且有带宽限制。

因此,如果没有SSL作为选项(请不要另外说明),您认为在这里使用SOAP而不是REST是更好的选择吗?我应该关注带宽吗? (返回的行数不会超过200,而且大多数会更小)。我们谈论的开销大概是多少?

是否有一个wcf REST配置的选项,我可以在没有证书的情况下进行身份验证(使用某种形式的自定义身份验证)?这对我来说比较好。

2 个答案:

答案 0 :(得分:1)

WSDL信封不在兆字节范围内。对于正常配置,它需要几个千字节每个请求。因此,可能的带宽瓶颈在很大程度上取决于请求/时间比

您始终可以使用令牌实现自定义身份验证机制。基本的想法是......

  • 当用户进行身份验证时,他会获得一个令牌,如果用户在该时间内没有采取行动,则会在20分钟后过期
  • 令牌存储(加密)在客户端cookie
  • Cookie用于每个客户的http请求
  • REST服务检查用户的cookie,提取令牌并断定用户是否经过身份验证

强烈建议遵循会员资格API 路径。我描述的逻辑是Membership API使用的逻辑。自己实现它,只是时间开销和bug生成器。我不明白你为什么要重新发明轮子......

希望我帮忙!

答案 1 :(得分:1)

Rest vs. Soap. Has REST a better performance?中详细讨论了REST和SOAP Web服务之间的性能比较。

您当然可以在WCF REST服务中实现自定义身份验证,而无需证书或安全传输。一种选择是使用类似于以下的绑定:

<bindings>
    <webHttpBinding>
        <binding name="default">
            <security mode="TransportCredentialOnly">
                <transport clientCredentialType="Windows" proxyCredentialType="Windows"/>
            </security>
        </binding>
    </webHttpBinding>
</bindings>

http://msdn.microsoft.com/en-us/library/bb924478(v=vs.110).aspx

包括微软的警告:“此模式不提供消息完整性和机密性。它提供基于HTTP的客户端身份验证。应谨慎使用此模式。它应该用于通过其他方式(例如IPSec)提供传输安全性的环境中,并且只有WCF基础结构提供客户端身份验证。“

以下链接提供了自定义WCF REST身份验证解决方案的全面概述: http://www.codeproject.com/Articles/304877/WCF-REST-4-0-Authorization-with-Form-Based-Authent