Pergunta

Eu tenho uma implementação personalizada do ClientCredentials em WCF. Duas das propriedades de base de ClientCredentials são o ClientCertificate e ServiceCertificate, como visto aqui (MSDN) .

Na minha configuração, eu tenho a minha ClientCredentials personalizados definido, e ambos os certificados definido:

        <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>

Esta configuração era completamente 100% trabalhar com autenticação UserName. Ele usou os certificados para criptografar o nome de usuário e senha para a mensagem. Então eu mudei para os meus ClientCredentials personalizados.

Em tempo de execução, aqui estão as propriedades que são definidas em meus CentralAuthClientCredentials:

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

Então, por que o certificado padrão do cliente e serviço que são definidos na configuração não set no objeto instanciado real? Parece que WCF ignorado as tags XML completamente!

Existe algum código que eu posso usar, talvez no construtor das credenciais, para obter os certificados da configuração manualmente?

Obrigado por qualquer ajuda!


Atualizar

Eu sou um idiota. Eu percebi isso. WCF foi realmente criar o meu exemplo corretamente com os certificados estabelecidos, mas no meu cliente WCF, eu tinha o seguinte remover / adicionar série, que eu pensar I copiado do exemplo MSDN:

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

Para remover as antigas credenciais e adicionar meus próprios entes personalizados. No entanto isso foi fazendo uma nova instância que não tinha os certificados set! oops!

Foi útil?

Solução

Para que eu possa marcar este como respondeu, estou acrescentando minha própria solução, que era para remover o código do cliente que faz uma nova credencial:

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

e usar o que já está estabelecido pelo WCF, em vez de chamar Remove () sobre ele.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top