Comment puis-je dire une classe de proxy client WCF pour utiliser l'authentification Windows et l'WindowsPrincipal de l'utilisateur connecté de domaine comme des informations d'identification?

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

Question

J'ai une fenêtre WPF client qui appelle un service Web WCF. est déjà connecté l'utilisateur dans le domaine Windows avant de lancer l'application et le service WCF utilise l'authentification Windows.

Je veux que le client WPF utiliser le WindowsPrincipal de l'utilisateur connecté lorsque vous appelez le service WCF. Je ne veux pas créer une nouvelle instance NetworkCredential avec un nom d'utilisateur et mot de passe EXPLICITE pour ce faire, tout simplement parce que demander à l'utilisateur de se connecter deux fois (dans Windows et l'application) est ... utilisateur bien assez hostile.

La plupart des échantillons que je l'ai utilisé vu 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 le

déjà existant (et de travail)
new WindowsPrincipal(WindowsIdentity.GetCurrent())

Quelqu'un sait comment faire cela? J'ai essayé d'installer security mode = "" et clientCredentialType = "" de transport app.config, mais jusqu'à présent sans résultat.

Était-ce utile?

La solution

Deux choses. Assurez-vous que votre service WCF est configuré 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'identification Windows. Un exemple (à partir de MSDN) est au-dessous.

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

Autres conseils

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"

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top