Сертификаты WCF не устанавливаются для пользовательских учетных данных

StackOverflow https://stackoverflow.com/questions/567303

Вопрос

У меня есть пользовательская реализация ClientCredentials в WCF.Двумя базовыми свойствами ClientCredentials являются ClientCertificate и ServiceCertificate, как видно здесь (MSDN).

В моей конфигурации у меня установлены пользовательские ClientCredentials и определены оба сертификата:

        <endpointBehaviors>
            <behavior name="MyCustomEndpointBehavior">
                <clientCredentials type="MyApp.Security.CentralAuthClientCredentials, MyApp">
                    <clientCertificate findValue="localhost" x509FindType="FindBySubjectName" storeLocation="CurrentUser" storeName="My" />
                    <serviceCertificate>
                        <defaultCertificate findValue="localhost" x509FindType="FindBySubjectName" storeLocation="CurrentUser" storeName="My" />
                        <authentication certificateValidationMode="None" revocationMode="NoCheck" />
                    </serviceCertificate>
                </clientCredentials>
            </behavior>
        </endpointBehaviors>

Эта конфигурация была полностью 100% работа с аутентификацией по имени пользователя.Он использовал сертификаты для шифрования имени пользователя и пароля для Сообщения.Затем я перешел на свой пользовательский ClientCredentials.

Во время выполнения вот свойства, которые устанавливаются в моем CentralAuthClientCredentials:

this.ClientCertificate = System.ServiceModel.Security.X509CertificateInitiatorClientCredential
this.ClientCertificate.Certificate = null
this.ServiceCertificate = System.ServiceModel.Security.X509CertificateRecipientClientCredential
this.ServiceCertificate.DefaultCertificate = null

Итак, почему сертификат клиента и службы по умолчанию определен в конфигурации не установить на фактический созданный объект?Похоже, что WCF полностью проигнорировал XML-теги!

Есть ли какой-нибудь код, который я могу использовать, возможно, в конструкторе учетных данных, чтобы получить эти сертификаты из конфигурации вручную?

Спасибо за любую помощь!


Обновить

Я идиот.Я понял это.WCF на самом деле правильно создавал мой экземпляр с установленными сертификатами, но в моем клиенте wcf у меня была следующая серия удаления / добавления, которую я подумай Я скопировал из примера MSDN:

this.ChannelFactory.Endpoint.Behaviors.Remove<ClientCredentials>();
this.ChannelFactory.Endpoint.Behaviors.Add(new CentralAuthClientCredentials());
return base.Channel.MyServiceMethod();

Чтобы удалить старые учетные данные и добавить свои собственные.Однако это создавало новый экземпляр, у которого не было установленных сертификатов!упс!

Это было полезно?

Решение

Чтобы я мог отметить это как ответ, я добавляю свое собственное решение, которое заключалось в удалении этого кода из клиента, создающего новые учетные данные:

this.ChannelFactory.Endpoint.Behaviors.Remove<ClientCredentials>();
this.ChannelFactory.Endpoint.Behaviors.Add(new CentralAuthClientCredentials());

и используйте тот, который уже установлен WCF, вместо того, чтобы вызывать Remove() для него.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top