Используйте WCF для использования службы SOAP, защищенной базовой аутентификацией и сертификатом.

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

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

В 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 »».

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


person user263097    schedule 28.10.2019    source источник


Ответы (1)


Если вы вызываете службу на основе клиентского прокси, вы можете предоставить соответствующие учетные данные на основе автоматически сгенерированной конфигурации привязки и режима аутентификации в файле конфигурации.
Я хотел бы знать, что такое режим аутентификации. почему нам нужно предоставить учетные данные 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=

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

person Abraham Qian    schedule 29.10.2019
comment
Спасибо за ответ. Веб-прокси отсутствует, и сертификат используется для добавления подписи в заголовок безопасности мыла. На самом деле я сделал это вчера, однако теперь я получаю количество целей в сообщении, которое не соответствует количеству целей в исключении требований приемника. Любая идея, что это может означать? - person user263097; 30.10.2019