2009-06-04 3 views

Répondre

43

Si le service Web appelé utilise la sécurité intégrée de Windows, créer un NetworkCredential à partir du WindowsIdentity actuel devrait être suffisant pour permettre au service Web d'utiliser la connexion Windows actuelle des utilisateurs. 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 de l'identité en cours ... qui serait en soi non sécurisé, vous permettant, le 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 le répète.

Edit: Pour obtenir les informations d'identification de l'identité actuelle, utilisez ce qui suit:

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

Comment créer un NetworkCredential à partir d'un WindowsIdentity? –

+12

Merci! Je viens d'utiliser CredentialCache.DefaultNetworkCredentials. –

+1

La méthode GetCredential renvoie-t-elle les informations d'identification des noms d'utilisateur et mots de passe stockés dans Windows XP/2003/Vista/2008? J'ai posé une question connexe ici: http://stackoverflow.com/questions/994232/how-to-call-a-web-service-using-stored-credentials Si GetCredential récupère les informations d'identification du magasin basé sur l'uri & type d'authentification, j'aurai ma réponse. Je vais tester cela et rendre compte ... –

4

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

+7

J'espère qu'il n'y a pas moyen d'obtenir le mot de passe de l'utilisateur actuel! :) Ce que je voudrais faire est d'utiliser les 'informations d'identification actuelles' par défaut pour le service Web. –

Questions connexes