2

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

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

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

我本可以选择 SSL,但为此,我必须为每个服务调用去 db 并验证用户。我更喜欢的是该服务为具有有效证书的客户提供服务。我从这篇文章中得到了很多信息。它没有解释的是如何在客户端和服务器上设置 x509 证书,以及如何控制只有我的客户端才能获得有效证书。

4

1 回答 1

4

如果你想在没有 SSL 的情况下实现用户名密码验证,你可以使用一种叫做ClearUsernameBinding的东西,它允许你通过 http 传输用户名/密码。

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

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

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

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

注意:在您的服务器上使用自签名证书时,您的客户端通过代码执行对您的网络服务的调用需要具有以下代码,以绕过自签名证书出现的安全异常:

    System.Net.ServicePointManager.ServerCertificateValidationCallback = (sender, cert, chain, error) =>
                                                                             {
                                                                                 return true;
                                                                             };
于 2012-04-05T15:29:53.580 回答