2010-07-02 12 views
3

J'ai un client Windows WPF qui appelle un service Web WCF. L'utilisateur est déjà connecté sur le domaine Windows avant de démarrer l'application et le service WCF utilise l'authentification Windows.Comment puis-je dire à une classe proxy client WCF d'utiliser l'authentification Windows et le WindowsPrincipal de l'utilisateur du domaine déjà connecté comme informations d'identification?

Je souhaite que le client WPF utilise WindowsPrincipal de l'utilisateur déjà connecté lors de l'appel du service WCF. Je ne veux pas créer une nouvelle instance de NetworkCredential avec un mot de passe EXPLICIT & pour ce faire, simplement parce que demander à l'utilisateur de se connecter deux fois (dans Windows et l'application) est ... bien joli utilisateur hostile.

La plupart des échantillons que j'ai vu utiliser cette façon de définir les informations d'identification, ce qui est pas ce que je veux

serviceClientProxy.ClientCredentials.Windows.ClientCredential 
= new NetworkCredential("username", "password", "domain"); 

Au lieu de cela, je voudrais faire quelque chose comme ça

serviceClientProxy.ClientCredentials.Windows.AllowedImpersonationLevel 
    = TokenImpersonationLevel.Identification; 
serviceClientProxy.ClientCredentials.Windows.ClientCredential 
    = { /* network credential for already logged in user */ } 

C'est, je veux un NetworkCredential pour les personnes déjà existantes (et de travail)

new WindowsPrincipal(WindowsIdentity.GetCurrent()) 

Est-ce que quelqu'un sait comment faire cela? J'ai essayé de définir security mode = "" et de transporter clientCredentialType = "" dans app.config, mais jusqu'à présent, en vain.

Répondre

0

Deux choses. Assurez-vous que votre service WCF est défini pour autoriser les informations d'identification Windows. Une fois que vous avez confirmé que vous devriez être en mesure de configurer votre client pour utiliser le type d'informations d'identification Windows. Un exemple (à partir de MSDN) est ci-dessous.

WSHttpBinding myBinding = new WSHttpBinding(); 
myBinding.Security.Mode = SecurityMode.Message; 
myBinding.Security.Message.ClientCredentialType = MessageCredentialType.Windows; 
0

Dans votre app.config:

  • Ajouter:

    <system.net> 
        <defaultProxy useDefaultCredentials="true"></defaultProxy> 
    </system.net> 
    
  • Dans votre fixation dans l'élément de liaison/sécurité/transport, de mettre proxyCredentialType = "NTLM"