0

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

例子:

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

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

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

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

4

2 回答 2

1

一种选择是使用客户端证书。

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

首先创建证书(如果您不购买而是自己生成证书,请确保 IT 人员已准备好将您的根证书添加到受信任的商店中,您的服务用户也是如此!)

添加此端点行为客户端

 <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" />

将您的网络服务器配置为使用 SSL 并需要客户端证书。

此答案是本指南的缩短版本

于 2013-08-19T10:23:28.857 回答
0

您想实施什么样的身份验证?Active Directory 还是自定义数据库?有很多方法可以实现安全性。如果您的服务和网站托管在公司环境中,我强烈建议您使用 Active Directory Windows 身份验证。有很多示例详细地描述了该步骤。

于 2013-08-19T09:30:04.220 回答