Использование WCF для использования службы SOAP, защищенной базовой аутентификацией и сертификатом - PullRequest
0 голосов
/ 28 октября 2019

Я пытаюсь создать клиент в Visual Studio 2019, который будет использовать службу SOAP, защищенную с использованием идентификатора / прохода и сертификата.

Я создал проект SoapUI, импортировав WSDL, а затем настроил параметры ws-security в проекте для получения исходящей подписи и импортировал хранилище ключей, в котором есть сертификат, который я хочу использовать. Наконец, я установил аутентификацию для запроса на использование Basic, установил id / pass и выбрал мою исходящую подпись в раскрывающемся списке WSS. После всего этого я могу без проблем вызвать сервис, используя Soap UI.

В Visual Studio я создал новый консольный проект, добавил ссылку на подключенный сервис, используя тот же WSDL, и теперь я пытаюсь написать код,Я попытался установить учетные данные, выполнив

System.ServiceModel.BasicHttpsBinding myBinding = new System.ServiceModel.BasicHttpsBinding();
System.ServiceModel.EndpointAddress myAddress = new System.ServiceModel.EndpointAddress("url");
ServiceReference1.CaseTypeClient myClient = new ServiceReference1.CaseTypeClient(myBinding, myAddress);
myClient.ClientCredentials.UserName.UserName = "ID";
myClient.ClientCredentials.UserName.Password = "Pass";
System.Security.Cryptography.X509Certificates.X509Certificate2 myCert = new System.Security.Cryptography.X509Certificates.X509Certificate2("CertFileName", "CertPass");
myClient.ClientCredentials.ClientCertificate.Certificate = myCert;

. Однако, когда я вызываю метод, я получаю ошибку мыла из службы, говоря «XmlException: несвязанный префикс, используемый в квалифицированном имени« wsse: FailedAuthentication »».

Как правильно делать то, что я пытаюсь сделать?

1 Ответ

0 голосов
/ 29 октября 2019

Если вы вызываете службу на основе клиентского прокси, вы можете предоставить соответствующие учетные данные на основе автоматически сгенерированной конфигурации привязки и режима аутентификации в файле конфигурации.
Я хотел бы знать, что такое режим аутентификации. почему мы должны предоставить учетные данные id / pass после того, как мы настроили сертификат? Есть ли веб-прокси во время связи?
Кроме того, чтобы обеспечить доступ к сертификату для службы WCF, мы обычно устанавливаем клиентский сертификат в локальном хранилище сертификатов и добавляем группу управления личным ключом «Все». сертификат учетной записи, а затем предоставьте сертификат со следующим утверждением.

    ServiceReference1.Service1Client client = new ServiceReference1.Service1Client();
                client.ClientCredentials.Windows.ClientCredential.UserName = "administrator";
                client.ClientCredentials.Windows.ClientCredential.Password = "123456";
client.ClientCredentials.ClientCertificate.SetCertificate(StoreLocation.LocalMachine, StoreName.My, X509FindType.FindByThumbprint, "9b8db0dfe615458ace0ae9e89fcb983c5d16f633");

Если проект основан на обычной аутентификации, нам нужно только установить заголовок http, используя закодированные в Base64 имя пользователя и пароль.

Авторизация: Basic YWRtaW5pc3RyYXRvcjphYmNkMTIzNCE =

Не стесняйтесь, дайте мне знать, если есть что-то, с чем я могу помочь

...