我一直在努力尝试使用托管在我无法控制的服务器中的 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;
如果我将凭证类型设置为证书,我会得到一个无效的用户名/密码。另一方面,如果我将其设置为用户名,我将收到“消息未签名错误”。
我非常感谢在这个问题上的一些反馈/帮助。问候!