web-dev-qa-db-fra.com

Obtention de NetworkCredential pour l'utilisateur actuel (C #)

J'essaie d'appeler un service Web à partir d'une application console et je dois fournir au client un System.Net.NetworkCredential objet.
Est-il possible de créer un objet NetworkCredential pour l'utilisateur qui a démarré l'application sans demander de nom d'utilisateur/mot de passe?

38
Paolo Tedesco

Si le service Web appelé utilise la sécurité intégrée de Windows, la création d'un NetworkCredential à partir du WindowsIdentity actuel devrait être suffisante pour permettre au service Web d'utiliser la connexion Windows des utilisateurs actuels. Cependant, si le service Web utilise un modèle de sécurité différent, il n'y a aucun moyen d'extraire un mot de passe des utilisateurs de l'identité actuelle ... qui en soi serait peu sûr, vous permettant, en tant que développeur, de voler les mots de passe de vos utilisateurs . Vous devrez probablement fournir à votre utilisateur un moyen de fournir son mot de passe et le conserver dans un cache sécurisé si vous ne voulez pas qu'il doive le fournir à plusieurs reprises.

Modifier: pour obtenir les informations d'identification de l'identité actuelle, utilisez les éléments suivants:

Uri uri = new Uri("http://tempuri.org/");
ICredentials credentials = CredentialCache.DefaultCredentials;
NetworkCredential credential = credentials.GetCredential(uri, "Basic");
46
jrista

Vous pouvez obtenir le nom d'utilisateur en utilisant System.Security.Principal.WindowsIdentity.GetCurrent () mais il n'y a aucun moyen d'obtenir le mot de passe utilisateur actuel!

3
abatishchev