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?
-
02-10-2019 - |
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.
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"