Réception d'une invite de connexion à l'aide de l'authentification Windows intégrée

108

J'ai une application .NET 3.5 fonctionnant sous IIS 7 sur le serveur Windows 2003 et je ne parviens pas à faire fonctionner correctement l'authentification Windows intégrée car je continue à être invité à me connecter. J'ai défini l'authentification Windows sur activée dans IIS avec tous les autres types de sécurité désactivés et mon authentification / autorisation de fichier web.config d'application est configurée comme:

<system.web>
    <compilation debug="true" strict="false" explicit="true" targetFramework="3.5" />
    <authenticationmode="Windows"/>
    <authorization>
    <deny users = "?" />
    </authorization>
</system.web>

Avec cette configuration, je m'attends à une vérification en coulisse de l'utilisateur Windows pour autoriser l'accès et refuser les utilisateurs anonymes. Cependant, ce que j'obtiens est une fenêtre de connexion Windows lorsque j'essaye d'accéder au site.

Je résout ce problème depuis quelques jours maintenant et je ne parviens pas à résoudre le problème. Sur la base de publications présentant des problèmes similaires, j'ai confirmé que mon URL n'incluait pas de points, j'ai vérifié que mes paramètres IE sont définis sur Activer l'authentification Windows intégrée, et j'ai également ajouté mon URL à mes sites intranet, tout en obtenant toujours la fenêtre contextuelle.

Pour le dépanner davantage, j'ai activé l'authentification anonyme dans IIS et modifié mon fichier web.config dans lequel je peux accéder directement, puis j'ai ajouté Response.Write (System.Security.Principal.WindowsIdentifity.getcurrent (). User.name.toString () ) pour essayer de voir quel utilisateur est utilisé dans l'authentification. Le résultat que j'obtiens est IIS APPPOOL \ myapp qui est évidemment le pool d'applications IIS pour mon application.

J'apprécie vraiment toute aide que quiconque peut fournir afin que j'utilise toujours uniquement l'authentification Windows, mais que je n'obtiens pas la fenêtre contextuelle et que l'authentification Windows soit effectuée contre l'utilisateur Windows réel.

Merci.


Remarque supplémentaire après un dépannage plus poussé:

Je viens de remarquer que lorsque la connexion échoue et que l'invite de connexion Windows s'affiche à nouveau, le nom d'utilisateur qui a tenté de se connecter en tant que "SERVERNAME" \ "USERNAME" m'a amené à croire qu'il essayait de valider l'utilisateur contre le serveur par rapport au domaine. Pour confirmer cela, j'ai créé un compte d'utilisateur local directement sur le serveur d'application avec le même nom d'utilisateur et le même mot de passe que l'utilisateur du domaine réseau et j'ai essayé de me connecter à nouveau. Le résultat a été que j'ai reçu à nouveau l'invite de connexion, mais lorsque j'ai entré le nom d'utilisateur et le mot de passe cette fois, j'ai pu me connecter avec succès. L'utilisateur réseau et le serveur d'applications sont sur le même domaine, donc je ne sais vraiment pas pourquoi l'authentification IIS pointe vers les comptes de serveur d'applications locaux et non vers les comptes de domaine. Je me rends compte que c'est une question IIS à ce stade, donc poster sur forums.iis.

Casey
la source
4
Il devrait y avoir un espace entre l'authentification et le mode, comme tel: <authentication mode="Windows" />J'espère que ce n'était qu'une faute de frappe dans votre question?
Sean Hanley
3
Votre exécution iis 7 sur le serveur 2003, êtes-vous sûr que je suis presque sûr que ce n'est pas possible.
Anicho

Réponses:

86

J'ai un serveur Windows 2008 sur lequel je travaille, donc ma réponse n'est pas complètement la même que celle de l'OP sur un serveur Windows 2003.

Voici ce que j'ai fait (enregistrer ceci ici pour que je puisse le retrouver plus tard).

J'avais ce même problème:

invite de connexion

Dans mon fichier Web.config , j'avais cette section:

<system.web>
    <authentication mode="Windows" />
    <authorization>
        <allow users="*" />
        <deny users="?" />
    </authorization>
</system.web>

Sous IIS, tous ces problèmes semblent être résolus sous l' icône d' authentification .

  1. Modifier les autorisations: assurez-vous que votre compte ASP.NET est autorisé. Le mien n'a pas été ajouté à l'origine.

Autorisation ASP.NET

Maintenant, allez dans les fonctionnalités de l' authentification :

Fonctions d'authentification

Activez l' authentification anonyme avec IUSR:

Authentification anonyme

Activez l' authentification Windows , puis cliquez avec le bouton droit pour définir les fournisseurs .

NTLM doit être le PREMIER!

Authentification Windows

Ensuite, vérifiez que sous Paramètres avancés ... la protection étendue est Accepter et Activer l'authentification en mode noyau est VÉRIFIÉE:

Réglages avancés

Une fois que j'ai fait cela, je suis retourné à mon application Web, j'ai cliqué sur le lien Parcourir et je me suis connecté sans avoir à fournir à nouveau mes informations d'identification.

J'espère que cela sera bénéfique pour beaucoup d'entre vous, et j'espère que cela me sera également utile plus tard.

jp2code
la source
1
Merci, Sujay. J'ai remarqué que la plupart de ces techniques sur SO manquent de photos pour montrer de quoi elles parlent, alors je voulais montrer toutes les étapes que j'ai utilisées. Si cela ne fonctionne pas pour quelqu'un, au moins il peut voir toutes les étapes qu'il a suivies et quelles autres options essayer.
jp2code
1
C'est incroyable, je suis devenu fou à cause de ça. Et les photos ont rendu les choses tellement plus faciles. MERCI!!
KratosMafia
1
Cela a fonctionné pour moi aussi, mais j'ai dû redémarrer mon instance Windows 2008 r2 à la fin. Je pense qu'il peut être important de le mentionner.
Aleksei Mialkin le
6
ne fonctionne pas pour Windows Server 2012 exécutant IIS 8.5
Minh Nguyen
3
Cela ne permet-il pas simplement l'authentification anonyme, permettant ainsi d'ignorer l'authentification Windows? Véritable question, c'est ainsi que m'apparaît ce qui précède.
Paul Hodgson
50

Juste pour le bénéfice des autres. Si l'erreur est a 401.1 Unauthorizedet que votre code d'erreur correspond 0xc000006d, vous rencontrez en fait une "fonctionnalité" de sécurité qui bloque les demandes au nom de domaine complet ou aux en-têtes d'hôte personnalisés qui ne correspondent pas au nom de votre ordinateur local:

Suivez cet article d'assistance pour résoudre le problème:

https://webconnection.west-wind.com/docs/_4gi0ql5jb.htm (original, maintenant disparu: http://support.microsoft.com/kb/896861 )

Dans l'article d'assistance, pour vous assurer qu'il ne se perd pas:

Le contournement est un hack de registre qui désactive explicitement cette stratégie.

Pour effectuer cette configuration manuellement, recherchez cette clé dans le registre sur le serveur:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa

et modifiez ou ajoutez une nouvelle clé:

DisableLoopbackCheck (DWORD)

puis envoyé la valeur à 1 pour désactiver la vérification de bouclage (l'authentification locale fonctionne) ou à 0 (l'authentification locale n'est pas autorisée).

Ou plus facilement, vous pouvez utiliser Powershell:

New-ItemProperty HKLM:\System\CurrentControlSet\Control\Lsa -Name "DisableLoopbackCheck" -Value "1" -PropertyType dword

Il semble que les versions récentes de Windows 10 (1803 et versions ultérieures?) Nécessitent également ce paramètre de configuration afin de s'authentifier localement.

Celui-ci m'a pris du temps parce que les commentaires de tout le monde ici n'ont pas réussi à m'aider. J'ai trouvé cet article et il l'a corrigé!

Kamranicus
la source
3
Vous monsieur êtes mon putain de héros! J'ai traversé tellement de «solutions» pour y arriver. Je vous remercie!
rosée du
1
Sainte vache! deux jours à essayer de mettre ça en marche, et finalement tu m'as donné la réponse! Merci!
BernieSF
1
Après avoir parcouru plusieurs réponses et vu que la configuration était identique à la mienne, c'était la réponse!
Sietse
1
Vous légende! Cela a fonctionné pour moi. J'ai passé beaucoup de temps à trouver ça.
Andy Vennells
2
@PTD Mis à jour avec un nouvel article et un résumé ajouté pour la postérité afin qu'il ne se perde pas. Voilà pour les permaliens de support MS!
kamranicus
26

J'ai eu un problème similaire dans lequel je voulais protéger seulement une certaine partie de mon site Web. Tout a bien fonctionné sauf dans IE. L'authentification anonyme et Windows est activée. Pour Anonyme, l'identité est définie sur l'identité du pool d'applications. Le problème était lié à l'authentification Windows. Après quelques recherches, j'ai lancé Fiddler et j'ai découvert qu'il utilisait Kerberos comme fournisseur (en fait, il est défini sur Negotiate par défaut). Je l'ai basculé sur NTLM et cela l'a corrigé. HTH

Daudi

Daudi
la source
1
C'est fait pour moi, merci! J'ai pu récupérer l'utilisateur Windows lors de l'accès local, mais la demande d'informations d'identification apparaîtrait à partir de n'importe quelle autre machine du domaine.
JSancho
1
@Daudi Comment définissez-vous l'identité par méthode d'authentification?
Rob Bell
18

Ajoutez l'autorisation [Utilisateurs du domaine] à votre sécurité Web.

  • Faites un clic droit sur votre site dans IIS sous le dossier Sites
  • Cliquez sur Modifier les autorisations ...
  • Sélectionnez l'onglet Sécurité
  • Dans la section Groupe ou noms d'utilisateur, cliquez sur le bouton Modifier ...
  • Dans la fenêtre contextuelle Autorisations, sous les noms de groupe ou d'utilisateur, cliquez sur Ajouter ...
  • Entrez [Utilisateurs du domaine] dans les noms d'objet pour sélectionner la zone de texte et cliquez sur OK pour appliquer la modification
  • Cliquez sur OK pour fermer la fenêtre contextuelle Autorisations
  • Cliquez sur OK pour fermer la fenêtre Propriétés et appliquer vos nouveaux paramètres
Harry
la source
10
Les étapes pour y parvenir seraient utiles.
Drew Chapin le
2
+1. Vous avez sauvé ma journée et ma raison. Très appréciée!
stakx - ne contribue plus
11

Ne créez pas d'erreurs sur votre serveur en modifiant tout. Si vous avez une invite Windows à vous connecter lors de l'utilisation de l'authentification Windows sur 2008 R2, accédez simplement à Providerset déplacez- vous vers le HAUT NTLMpour chaque application. Quand Negotiateest le premier dans la liste, l'authentification Windows peut cesser de fonctionner pour une application spécifique sur 2008 R2 et vous pouvez être invité à entrer un nom d'utilisateur et un mot de passe qui ne fonctionnent jamais. Cela arrive parfois lorsque vous avez mis à jour votre application. Assurez-vous simplement que NTLMc'est le premier sur la liste et vous ne verrez plus jamais ce problème.

Slo
la source
1
Cela a réglé le problème pour moi.
Bigwave
9
À moins bien sûr que vous ne vouliez pas que NTLM soit en premier sur votre liste ... il y a des conséquences à prendre cette action, toute personne effectuant un tel changement devrait comprendre la différence entre NTLM et Negotiate (au niveau le plus élémentaire, Négociez les premières tentatives d'authentification Kerberos et tombe retour à NTLM si cela échoue). Si vous voulez Kerberos (et beaucoup le font), ce n'est pas une bonne solution. Quelques détails ici: msdn.microsoft.com/en-us/library/aa480475.aspx
TCC
8

Si votre URL comporte des points dans le nom de domaine, IE la traitera comme une adresse Internet et non locale. Vous avez au moins deux options:

  1. Obtenez un alias à utiliser dans l'URL pour remplacer server.domain. Par exemple, myapp.
  2. Suivez les étapes ci-dessous sur votre ordinateur.

Accédez au site et annulez la boîte de dialogue de connexion. Laissez ceci arriver:

entrez la description de l'image ici

Dans les paramètres d'IE:

entrez la description de l'image ici

entrez la description de l'image ici

entrez la description de l'image ici

Bob Horn
la source
1
Nous utilisons Windows Server 2012 et c'est la seule solution qui a fonctionné pour nous. Merci beaucoup!
ashilon
5

WindowsIdentity.GetCurrentest correct: vous devriez obtenir l'utilisateur APPPOOL. Cela est dû au fait que le processus ASP.NET, qui exécute votre code, est l'identité actuelle. Si vous voulez qu'il renvoie l'utilisateur frappant l'identité du site, vous devrez ajouter la ligne suivante dans votre web.config:

<identity impersonate="true" />

Cela amène le processus à prendre l'identité de l'utilisateur qui demande la page. Toutes les actions seront effectuées en leur nom, donc toute tentative de lecture de dossiers sur le réseau ou d'accès aux ressources de la base de données et autres signifiera que l'utilisateur actuel aura besoin d'autorisations pour ces choses. Vous pouvez en savoir plus sur l'usurpation d'identité ici . Notez que selon la configuration de la topologie de votre serveur Web / de base de données, vous pouvez rencontrer des problèmes de délégation avec l'emprunt d'identité activé.

Mais votre problème initial est qu'il semble que l'identité ne peut pas être déterminée et que vous obtenez une fenêtre de connexion. Je noterai que vous n'avez pas besoin du <deny>blocage si vous avez désactivé l'authentification anonyme dans IIS. Nous ne l'incluons jamais (sauf dans des <location>blocs spéciaux et autres), donc je dirais que vous pourriez essayer de le supprimer et réessayer. Tout le reste sonne bien, cependant.

Vous n'avez pas spécifié quel utilisateur exécute le pool d'applications dans IIS. Est-ce un compte personnalisé ou est-ce celui par défaut? S'il est personnalisé, s'agit-il d'un compte de domaine ou d'un compte local sur le serveur Web? Les comptes personnalisés peuvent parfois nécessiter quelques étapes supplémentaires, telles que l'enregistrement d'un SPN. En outre, cela peut être un problème avec le compte personnalisé n'ayant pas l'autorisation dans AD pour résoudre le compte de l'utilisateur entrant.

Vous pouvez également consulter les journaux IIS pour voir quelle réponse est renvoyée. Ce sera probablement un 401, mais il devrait avoir un sous-numéro après lui comme 401.2 ou quelque chose comme ça. Ce sous-numéro peut parfois aider à déterminer la racine du problème. Cet article de la base de connaissances en répertorie cinq.

Sean Hanley
la source
+1 pour mentionner l'exigence d'un SPN. En fait, la plupart des problèmes que j'ai rencontrés avec les fenêtres contextuelles de connexion étaient dus à un SPN manquant dans un environnement Kerberos.
SBS
5

Cela a réglé le problème pour moi.

Mon serveur et mon ordinateur client sont Windows 7 et sont dans le même domaine

  1. dans iis7.5-activer l'authentification Windows pour votre intranet (désactiver toutes les autres authentifications .. également Pas besoin de mentionner l'authentification Windows dans le fichier web.config

  2. puis allez sur le PC client .. IE8 ou 9- Outils-Options Internet-Sécurité-Intranet local-Sites-avancés-Ajoutez votre site (enlevez le ticketmark "require server verfi ..." .. pas besoin

  3. IE8 ou 9- Outils-Options Internet-Sécurité-Intranet local-Niveau personnalisé-authentification de l'utilisateur-connexion-sélectionner une connexion automatique avec le nom d'utilisateur et le mot de passe actuels

  4. enregistrez ces paramètres .. vous avez terminé .. Plus besoin de demander le nom d'utilisateur et le mot de passe.

  5. Assurez-vous que, puisque votre ordinateur client fait partie du domaine, vous devez avoir un GPO pour ces paramètres, ou sinon ce paramètre sera rétabli lorsque l'utilisateur se connectera à Windows la prochaine fois

José Arun
la source
2
Pour 1) j'ai en fait activé l'emprunt d'identité et l'authentification Windows et tout allait bien. La clé pour moi était 2) où vous ajoutez l'adresse du site distant à la zone intranet locale.
SideFX
4

Peut être lié au navigateur. Si vous utilisez IE, vous pouvez accéder aux Paramètres avancés et cocher la case "Activer l'authentification intégrée Windows".

Dante
la source
4

Dans mon cas, les paramètres d'autorisation n'ont pas été configurés correctement.

j'ai dû

  1. ouvrir les règles d'autorisation .NET dans le gestionnaire IIS

    ouvrir les règles d'autorisation .NET dans le gestionnaire IIS
  2. et supprimez la règle de refus

    supprimer la règle de refus
johnecon
la source
3

Dans notre intranet, le problème a été résolu côté client en ajustant les paramètres de sécurité comme indiqué ici. Chacune des cases à cocher à droite a fonctionné pour nous.

Options Internet IE

mosheb
la source
2

Je viens de résoudre un problème similaire avec une application ASP.Net.

Symptômes: je pouvais me connecter à mon application en utilisant un utilisateur local, mais pas un utilisateur de domaine, même si la machine était correctement jointe au domaine (comme vous le dites dans votre note supplémentaire). Dans la visionneuse d'événements de sécurité, il y avait un événement avec l'ID = 4625 "sid de domaine incohérent".

Solution: j'ai trouvé la solution ici . Le problème était que mes machines de test étaient des machines virtuelles clonées (Windows Server 2008 R2; un contrôleur de domaine et un serveur Web). Les deux avaient le même SID de machine, ce qui a apparemment causé des problèmes. Voici ce que j'ai fait:

  1. Supprimez le serveur Web du domaine.
  2. Exécutez c: \ Windows \ System32 \ Sysprep \ Sysprep.exe sur la machine virtuelle.
  3. Redémarrez la VM.
  4. Rejoignez le serveur Web dans le domaine.

Vous perdez certains paramètres dans le processus (préférences utilisateur, adresse IP statique, recréer le certificat auto-signé), mais maintenant que je les ai recréés, tout fonctionne correctement.

Matthieu
la source
Le clonage est nul lorsque vous essayez de configurer une délégation contrainte.
SideFX
2

J'ai également eu le même problème. J'ai essayé la plupart des choses trouvées sur ce forum et sur d'autres.

Finalement a réussi après avoir fait un petit RnD.

Je suis entré dans les paramètres IIS , puis dans les options d' autorisation de mon site Web , j'ai ajouté mon groupe d'utilisateurs du domaine des organisations.

Maintenant que tous les utilisateurs de mon domaine ont eu accès à ce site Web, je n'ai pas rencontré ce problème.

J'espère que cela t'aides

Saurabh
la source
4
De quelles options d'autorisation parlez-vous? Pouvez-vous fournir des étapes plus détaillées sur ce que vous avez fait?
Drew Chapin le
1

Avez-vous essayé de vous connecter avec votre préfixe de domaine, par exemple DOMAINE \ Nom d'utilisateur? IIS 6 utilise par défaut l'ordinateur hôte comme domaine par défaut, de sorte que la spécification du domaine à l'ouverture de session peut résoudre le problème.

chalémique
la source
1

J'ai essayé les astuces de configuration IIS ci-dessus et le piratage du registre de bouclage, et j'ai examiné et recréé les autorisations du pool d'applications et une douzaine d'autres choses et je n'ai toujours pas pu me débarrasser de la boucle d'authentification en cours d'exécution sur mon poste de travail de développement avec IIS Express ou IIS 7.5, depuis une session de navigation locale ou distante. J'ai reçu quatre réponses d'état 401.2 et une page blanche. Le même site déployé sur mon serveur de transfert IIS 8.5 fonctionne parfaitement.

Enfin, j'ai remarqué que le balisage dans le corps de la réponse qui était vide par le navigateur contenait la page par défaut pour une connexion réussie. J'ai déterminé que la gestion des erreurs personnalisées pour ASP.NET et HTTP pour l'erreur 401 empêchait / interférait avec l'authentification Windows sur mon poste de travail mais pas le serveur intermédiaire. J'ai passé plusieurs heures à jouer avec cela, mais dès que j'ai supprimé la gestion personnalisée pour l'erreur 401, le poste de travail était revenu à la normale. Je présente cette façon encore une autre de tirer votre propre pied.

Mike M
la source
0

L'authentification Windows dans IIS7.0 ou IIS7.5 ne fonctionne pas avec Kerberos (provider = Negotiate) lorsque l'identité du pool d'applications est ApplicationPoolIdentity One doit utiliser le service réseau ou un autre compte intégré. Une autre possibilité est d'utiliser NTLM pour faire fonctionner Windows Authenticatio (dans l'authentification Windows, les fournisseurs, mettre NTLM au-dessus ou supprimer négocier)

chris van de vijver

Chris van de vijver
la source
3
Incorrect. Redémarrez votre serveur. Remarquez que cela fonctionne maintenant. Appliquez le correctif KB2545850.
Amit Naidu
Sensationnel. Reboot vient de le réparer pour moi. Besoin de vérifier maintenant combien de temps. Des idées? N'a pas encore enquêté sur le correctif.
mplwork
nous avons eu absolument le même cas - Negotiate ne fonctionnait pas avec ApplicationPoolIdentity avant le redémarrage.
SergeyT
0

J'ai eu le même problème car l'utilisateur (Identity) que j'ai utilisé dans le pool d'applications n'appartenait pas au groupe IIS_IUSRS. Ajout de l'utilisateur au groupe et tout fonctionne

utilisateur3731689
la source
0

Dans mon cas, la solution était (en plus des ajustements suggérés ci-dessus) de redémarrer mon ordinateur de développement local / IIS (serveur d'hébergement). Mon utilisateur vient d'être ajouté au groupe de sécurité AD nouvellement créé - et la stratégie ne s'appliquait pas au compte utilisateur AD jusqu'à ce que je me déconnecte / redémarre mon ordinateur.

J'espère que cela aidera quelqu'un.

ukie
la source
0

J'ai rencontré le même problème de demande d'informations d'identification, et j'ai fait une recherche rapide et rien sur Internet ne pouvait le résoudre. Il a fallu un certain temps pour trouver le problème, un problème idiot.

Dans IIS -> Paramètres avancés -> Informations d'identification du chemin physique (est vide)

Dès que j'ai ajouté un ID de machine (domaine / utilisateur) ayant accès à la VM / serveur, l'invite de mot de passe s'arrêterait.

J'espère que cela t'aides

kao
la source
0

J'avais ce problème sur .net core 2 et après avoir parcouru la plupart des suggestions d'ici, il semble que nous ayons manqué un paramètre sur web.config

<aspNetCore processPath="dotnet" arguments=".\app.dll" forwardWindowsAuthToken="false" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />

Le paramètre correct était forwardWindowsAuthToken = "true", ce qui semble évident maintenant, mais quand il y a tant de situations pour le même problème, il est plus difficile de les identifier

Edit: j'ai également trouvé utile l' article Msdn suivant qui décrit le dépannage du problème.

Eugen
la source
-1

J'ai eu le même problème et il a été résolu en modifiant l'identité du pool d'applications du pool d'applications sous lequel l'application Web s'exécute vers NetworkService entrez la description de l'image ici

Syed
la source