Question

J'essaie d'utiliser System.Net.WebClient dans une application WinForms pour télécharger un fichier sur un serveur IIS6 doté de l'authentification Windows en tant que il n’ya que la méthode 'Authentification'.

WebClient myWebClient = new WebClient();
myWebClient.Credentials = new System.Net.NetworkCredential(@"boxname\peter", "mypassword"); 
byte[] responseArray = myWebClient.UploadFile("http://localhost/upload.aspx", fileName);

Je reçois un message "Le serveur distant a renvoyé une erreur: (401) non autorisé", il s'agit en réalité d'un fichier 401.2

Le client et IIS se trouvent sur le même ordinateur de développement Windows Server 2003.

Lorsque j'essaie d'ouvrir la page dans Firefox et d'entrer les mêmes informations d'identification que dans le code, la page s'affiche. Cependant, lorsque j'utilise IE8, je reçois la même erreur 401.2.

J'ai essayé Chrome et Opera et ils fonctionnent tous les deux.

L'option "Activer l'authentification Windows intégrée" est activée dans les options Internet d'IE.

Le journal des événements de sécurité comporte un audit d'échec:

Logon Failure:
    Reason:     An error occurred during logon
    User Name:  peter
    Domain:     boxname
    Logon Type: 3
    Logon Process:  ÈùÄ
    Authentication Package: NTLM
    Workstation Name:   boxname
    Status code:    0xC000006D
    Substatus code: 0x0
    Caller User Name:   -
    Caller Domain:  -
    Caller Logon ID:    -
    Caller Process ID:  -
    Transited Services: -
    Source Network Address: 127.0.0.1
    Source Port:    1476

J'ai utilisé Process Monitor et Fiddler pour enquêter, mais en vain.

Pourquoi cela fonctionnerait-il pour les navigateurs tiers, mais pas avec IE ou System.Net.WebClient?

Était-ce utile?

La solution

J'ai rencontré un problème similaire dans lequel la sécurité Integrated / NTLM ne fonctionnerait que si vous accédez à l'hôte par nom d'ordinateur ou localhost. En fait, il s’agit d’une fonctionnalité [médiocre] du document dans Windows conçue pour protéger contre les "attaques par réflexion".

En gros, vous devez créer une clé de registre sur la machine qui tente d’accéder au serveur et ajouter le domaine que vous essayez d’ajouter à la liste blanche. Chaque nom d’hôte / nom de domaine complet doit figurer sur sa propre ligne. Il n’ya pas de caractères génériques et le nom doit correspondre exactement. Extrait de l'article de la base de connaissances:

  • Cliquez sur Démarrer, sur Exécuter, tapez regedit, puis cliquez sur OK.
  • Dans l'Éditeur du Registre, recherchez la clé de registre suivante, puis cliquez dessus: HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Lsa \ MSV1_0
  • Cliquez avec le bouton droit sur MSV1_0 , pointez sur Nouveau, puis cliquez sur Valeur multi-chaînes.
  • Tapez BackConnectionHostNames , puis appuyez sur Entrée.
  • Cliquez avec le bouton droit de la souris sur BackConnectionHostNames , puis cliquez sur Modifier.
  • Dans la zone Données de la valeur, tapez le nom d'hôte ou les noms d'hôte des sites situés sur l'ordinateur local, puis cliquez sur OK.
  • Quittez l'Éditeur du Registre, puis redémarrez l'ordinateur.

http://support.microsoft.com/kb/956158/en-us

Autres conseils

Avez-vous essayé ...

new NetworkCredential( "peter", "password", "boxname" );

Vous pouvez également essayer ...

var credCache = new CredentialCache();
credCache.Add( new Uri ("http://localhost/upload.aspx"),
                 "Negotiate",
                 new NetworkCredential("peter", "password", "boxname"));
wc.Credentials = credCache;

En outre, selon cette , il se peut que IIS soit mal configuré. Essayez de remplacer "Négocier". avec " Basic " ci-dessus et en vérifiant votre configuration IIS pour le site Web. Il y a aussi un tas de causes possibles "nofollow noreferrer"> ici .

Essayez d'aller dans les options d'IE et ajoutez explicitement le site à la zone Intranet. Ensuite, relancez le programme. Vous ne devriez pas non plus exécuter le programme à partir d'un compte administrateur. Cela pourrait déclencher la configuration de sécurité améliorée pour Internet Explorer .

Cela pourrait expliquer pourquoi vous pouvez accéder au site avec Firefox et Opera, mais pas avec IE ou WebClient.

Sans connaître votre déploiement IIS, et en supposant que vous ayez les règles d'autorisation correctes pour le téléchargement défini dans IIS (par exemple, le droit autoriser * ACL dans les bons répertoires que vous essayez de télécharger du contenu, etc.), la première chose que je voudrais essayer consiste à définir UseDefaultCredentials sur true au lieu de définir explicitement Credential. (Vous pensez peut-être accéder au serveur avec les informations d'identification que vous définissez, mais ce n'est pas le cas? Cela serait possible si cela fonctionnait.)

Il s'agit d'un scénario très courant. Je me concentrerai donc sur les règles d'autorisation IIS pour le répertoire dans lequel vous essayez de télécharger le fichier, les listes de contrôle d'accès réelles de ce répertoire. Par ex. votre site est-il imité ou non? Si tel est le cas, vous devez disposer d'ACL dans ce répertoire. Sinon, le pool d'applications du compte en cours d'exécution est activé.

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