1

我一直在努力尝试使用托管在我无法控制的服务器中的 Web 服务(因此我无法在服务器部分进行任何配置)。

我一直在使用 WCF 尝试使用同时具有用户名/密码和证书身份验证要求(以及 HTTPS 连接)的 Web 服务。

我的代码是这样的:

        EndpointAddress ea = new
                EndpointAddress("https://the.server.address");

        BasicHttpBinding bs = new BasicHttpBinding();

        bs.Security.Mode = BasicHttpSecurityMode.TransportWithMessageCredential;
        bs.Security.Transport.ClientCredentialType =
            HttpClientCredentialType.Certificate;

        //here if I put username I get a 'message is not signed' error. 
           If I put credentials I get an 'invalid username/password'.
        bs.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.Certificate;

        var svc = new myWebServiceClient(bs, ea);

        var request = new ObjectWS();

        svc.ClientCredentials.ClientCertificate.SetCertificate(
                                        StoreLocation.CurrentUser,
                                                 StoreName.Root,
                                X509FindType.FindBySerialNumber,
                                "the serial");

        svc.ClientCredentials.UserName.UserName = "user";
        svc.ClientCredentials.UserName.Password = "pass";

        //the call to the method in the WS
        request= svc.getValue("param");

问题是,由于我是 WCF(以及一般的 WebServices)的新手,我实际上并不知道如何使用用户名和证书身份验证来使用 Web 服务,也不知道这是否有意义一点也不。

在行中:

bs.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.Certificate;

如果我将凭证类型设置为证书,我会得到一个无效的用户名/密码。另一方面,如果我将其设置为用户名,我将收到“消息未签名错误”。

我非常感谢在这个问题上的一些反馈/帮助。问候!

4

0 回答 0