wcf basichttpBinding的用户名和密码安全性 - 基于消息

时间:2012-04-05 06:13:44

标签: asp.net wcf web-services security

我在界面上创建了一个ServiceContract的接口,并在其所有方法上创建了OperationContract。我在一个类中实现了这个接口,然后在我的asp.net网站上我添加了wcf服务,它创建了一个svc文件(因为我想在IIS中使用我的网站托管它)。现在该服务已启动并可在http://localhost:8732/webui/webservice/camservice.svc访问。现在我想为此服务启用用户名和密码身份验证。我想svc使用basicHttpBinding因为我没有在web.config中进行任何配置以使其运行。现在我如何在此服务上启用用户名/密码验证?互联网上有很多文章,但我相信,wcf安全性是如此巨大,以至于我无法通过我使用的方法获得有关用户名/密码认证的重点解释。我正在使用.net 4.0和vs 2010

编辑:好的,我已将问题缩小了一点。我相信,消息级安全性是我需要的

<security mode="Message">
                <message clientCredentialType="Certificate" />
            </security>

我本可以使用SSL,但为此,我必须为每个服务调用转到db并验证用户身份。我更喜欢的是服务提供有效证书的客户。我从this article获得了大量信息。它没有解释的是如何在客户端和服务器上设置x509证书,以及如何控制只有我的客户才能获得有效证书。

1 个答案:

答案 0 :(得分:4)

如果您想在没有SSL的情况下实现用户名密码验证,可以使用名为ClearUsernameBinding的内容,允许您通过http传输用户名/密码。

注意:仅当您的服务位于公司防火墙后面时才使用此功能,该服务器为托管服务的服务器提供足够的安全性。

在使用双向SSL方面,您需要在服务器上安装服务证书.pfx,该服务证书由受信任的机构或本地计算机帐户的个人存储文件夹下的自签名证书颁发。

然后,对于客户端证书,您需要请求客户端发送.cer文件并将其安装在本地计算机帐户上的Trusted People store文件夹下的服务器上。

在客户端计算机上,您需要在当前用户的个人存储文件夹下安装客户端证书.pfx。

注意:在服务器上使用自签名证书时,通过代码调用Web服务的客户端需要具有以下代码,以绕过自签名证书的安全例外:

    System.Net.ServicePointManager.ServerCertificateValidationCallback = (sender, cert, chain, error) =>
                                                                             {
                                                                                 return true;
                                                                             };