2009-02-19 6 views
2

J'ai une implémentation personnalisée de ClientCredentials dans WCF. Deux des propriétés de base de ClientCredentials sont ClientCertificate et ServiceCertificate, comme vu here (MSDN).Les certificats WCF ne sont pas définis sur les informations d'identification personnalisées

Dans ma configuration, j'ai mes ClientCredentials personnalisés définis, et les deux certificats définis:

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

Cette configuration a été complètement travailler 100% avec l'authentification UserName. Il a utilisé les certificats pour chiffrer le nom d'utilisateur et le mot de passe du message. Ensuite, je suis passé à mes personnalisations ClientCredentials.

Lors de l'exécution, voici les propriétés qui sont définies sur mes CentralAuthClientCredentials:

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

Alors, pourquoi le certificat par défaut client et le service qui sont définis dans la configuration ne ensemble sur l'objet instancié réelle? Il semble que WCF ait complètement ignoré les balises XML!

Y a-t-il du code que je peux utiliser, peut-être dans le constructeur des informations d'identification, pour obtenir ces certificats de la configuration manuellement?

Merci pour toute aide!


Mise à jour

Je suis un idiot. Je l'ai compris. WCF a été crée en fait correctement mon exemple avec l'ensemble des certificats, mais dans mon client WCF, j'ai eu les éléments suivants supprimer/ajouter des séries, que je pense je copiais de l'exemple MSDN:

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

Pour retirer l'ancien informations d'identification et ajouter mes propres personnalisés. Cependant, cela faisait une nouvelle instance qui n'avait pas les certificats fixés! Oops!

+0

Pouvez-vous montrer la liaison utilisée? –

+0

Pourriez-vous publier votre solution en réponse et accepter de la sorte qu'elle n'apparaisse pas dans les questions non répondues? –

Répondre

1

Alors que je peux marquer cela comme une réponse, j'ajoute ma propre solution, qui devait retirer ce code du client qui fait un nouveau titre:

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

et utiliser celui déjà fixé par WCF, au lieu d'appeler Remove() dessus.

Questions connexes