私は、制御できないサーバーでホストされている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 (および Web サービス全般) の初心者であるため、ユーザー名と証明書認証の両方を使用して Web サービスを使用する方法を実際に知らないことです。また、それが意味があるかどうかもわかりません。まったく。
行で:
bs.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.Certificate;
資格情報の種類を証明書に設定すると、無効なユーザー名/パスワードが返されます。一方、ユーザー名に設定すると、「メッセージが署名されていないというエラー」が表示されます。
この問題に関するフィードバックやヘルプをいただければ幸いです。よろしく!