保护WCF web服务

本文关键字:服务 web WCF 保护 | 更新日期: 2023-09-27 18:28:05

我目前正在维护一个严重依赖WCF web服务的web应用程序。目前,这些服务没有安全性,因此任何知道服务地址和参数的人都可以从中访问数据,甚至无需登录web应用程序。

示例:

http://www.mydomain.com/webservices/holidays.svc/GetHolidaysForUser?id=1234

这个例子只需要在没有任何身份验证的情况下将JSON字符串发布回浏览器。

不幸的是,WCF是我不太熟悉的东西,所以我不知道从哪里开始。

注意:如果可能的话,我被要求使用表单身份验证。

保护WCF web服务

一个选项是使用客户端证书。

如果您无法更改当前实现(如果您选择"表单身份验证"路线,则需要此解决方案),则此解决方案可能是一个选项。请记住,处理证书需要IT操作在服务器和客户端上生成和安装证书。这在你的情况下是否可行,从你的问题中还不清楚。

首先创建证书(如果您不是购买证书,而是自己生成证书,请确保IT人员已做好准备,可以在Trusted Store中添加您的根证书,这对您服务的用户也是如此!)

添加此端点行为客户端

 <behaviors>
      <endpointBehaviors>
        <behavior name="ClientCertificateBehavior">
          <clientCredentials>
            <clientCertificate findValue="client.com"   
                               storeLocation="CurrentUser" 
                               storeName="My" 
                               x509FindType="FindBySubjectName" />
          </clientCredentials>
        </behavior>
      </endpointBehaviors>
    </behaviors>

添加/修改此服务器端:

 <wsHttpBinding>
      <binding name="wsHttpEndpointBinding">
        <security mode="Transport">
          <transport clientCredentialType="Certificate" />
        </security>
      </binding>
    </wsHttpBinding>
<endpoint binding="wsHttpBinding" bindingConfiguration="wsHttpEndpointBinding"
        name="wsHttpEndpoint" contract="IService" />

将Web服务器配置为使用SSL并要求客户端证书。

这个答案是本指南的简短版本

您希望实现哪种身份验证?Active Directory还是自定义数据库?实现安全性的方法有很多。如果您的服务和网站托管在公司环境中,我强烈建议您使用active directory windows身份验证。有很多例子详细地逐一描述了这一步骤。