401 - Non autorisé sur Server 2008 R2 IIS 7.5


20

J'ai déployé une application Web sur la boîte Server 2008 IIS 7.5.

A distance , il donne cette erreur: 401 - Unauthorized: Access is denied due to invalid credentials. (distant = bureaux sur le même LAN)

Avoir essayé plusieurs clients distants en utilisant différents navigateurs, le même résultat. (IE, FF et Chrome)

Frapper l'application depuis le bureau du serveur lui-même fonctionne parfaitement . Cependant, je n'ai pas essayé Firebug sur le bureau du serveur. Je suppose qu'il émet toujours un code d'état 401 tout en renvoyant le contenu de toute façon. Voir la mise à jour # 2.

L'application utilise l'authentification anonyme.

L'application est écrite en .NET 4.0 Asp.Net en utilisant le framework MVC.

Le contenu statique fonctionne bien, exemple: http://server.com/content/image.jpg

Sysinternals procmonrenvoie ces 2 résultats pour chaque demande: FAST IO DISALLOWED et PATH NOT FOUND.

J'ai 2 autres applications MVC fonctionnant correctement sur le même serveur. J'ai vérifié la sécurité des dossiers et ils correspondent tous.

L'application fonctionne correctement sur une boîte Server 2008 IIS 7.0.

Rien ne s'affiche dans le journal des événements sur le serveur à ce sujet.

Tirer mes cheveux ici, des conseils de dépannage?

MISE À JOUR # 1 : Ceci devient juste plus de WTF pendant que je creuse.

Si je clique sur l'application dans le Gestionnaire IIS -> Pages d'erreur -> Sélectionner les paramètres de fonctionnalité Detailed Errors, l'application fonctionne à distance. Ne pas laisser cela activé, donc le problème n'est pas encore résolu, c'est juste plus déroutant.

MISE À JOUR # 2 : En utilisant Firebug, je vois que le statut est toujours 401 Unauthorized, mais la réponse renvoie le code HTML correct de l'application.

MISE À JOUR # 3 Jouer avec le suivi des demandes ayant échoué, voici le suivi des demandes AVERTISSEMENT qui cause le 401:

ModuleName ManagedPipelineHandler
Notification 128
HttpStatus 401 
HttpReason Unauthorized 
HttpSubStatus 0 
ErrorCode 0 
ConfigExceptionInfo  
Notification EXECUTE_REQUEST_HANDLER 
ErrorCode The operation completed successfully. (0x0)

La mise à jour # 4 du journal IIS standard montre ceci:

#Software: Microsoft Internet Information Services 7.5
#Version: 1.0
#Date: 2010-07-20 19:17:22
#Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) sc-status sc-substatus sc-win32-status time-taken
2010-07-20 19:17:22 10.10.1.10 GET /Purchasing/Home - 80 - 10.10.1.12 Mozilla/5.0+(Windows;+U;+Windows+NT+6.1;+en-US;+rv:1.9.2.6)+Gecko/20100625+Firefox/3.6.6 401 0 0 4414

Avez-vous essayé d'exécuter Failed Request Tracing sur le serveur et d'accéder à l'application à partir de la machine distante. S'il y a un échec, vous devriez voir la cause.
Vivek Kumbhar

@vivek voir ma dernière mise à jour
mxmissile

ARRG !!! Got mais par là encore! 2 heures gaspillées à chercher Html.RenderAction, puis Html.Actionj'ai réalisé que Razor utilisait mes recherches initiales.
mxmissile

Oh ça fait quelques années, devinez quoi? Je viens de perdre 3 heures ce matin sur ce NOUVEAU! Quand vais-je apprendre?!?!?!
mxmissile

Réponses:


19

Parfois, vous devez prendre du recul ... La cause de cela était Html.RenderAction()à mon avis une méthode d'action qui était marquée avec l' [Authorize]attribut.


1
C'était mon problème, c'était assez frustrant pour frapper un panda (pas que je le ferais). Merci mxmissile.
Khalid Abuhakmeh

4

Puisqu'il fonctionne localement mais pas à distance, il me semble que le compte d'utilisateur anonyme n'a pas accès à quelque chose, mais votre utilisateur Windows le fait. Pour le prouver, désactivez l'authentification Windows pour le site Web et voyez s'il se casse localement.

Tout ce qui se brise fonctionne probablement en tant qu'identité de votre site Web au lieu de l'identité de votre pool d'applications, sinon il se briserait localement et à distance. Ma recommandation si vous avez 1 à 1 mappages de sites vers des pools d'applications, ou si vous disposez d'un environnement hautement fiable, est de définir le compte d'utilisateur anonyme pour utiliser l'identité du pool d'applications. Ensuite, vous n'avez pas à vous soucier d'un deuxième utilisateur à entretenir.

Vous avez mentionné l'explorateur de processus. C'est bon pour trouver des informations en cours d'exécution, mais l'outil qui découvrira probablement les erreurs d'accès refusé est processmon (également de sysinternals). Essayez-le, repro et capture, puis recherchez le mot «nié». Il devrait signaler tout problème d'accès refusé sur le disque.


4

Vous aurez ce même comportement lorsque vous avez un filtre pour l'autorisation personnalisée qui hérite de AuthorizeAttributeet un ou plusieurs appels à la OnAuthorizationméthode, l'un d'eux étant défini AuthorizationContext.Resultsur `HttpUnauthorizedResult '


4

Pour une raison quelconque, cela a résolu mon problème.

  1. Cliquez sur le site dans IIS.
  2. Authentification par double clic
  3. Clic droit et choisissez Paramètres avancés
  4. Désélectionnez "Activer l'authentification en mode noyau"

2

Avez-vous vérifié les paramètres dans les règles d'autorisation? Si quelqu'un peut accéder à cette page (ce qui semble être votre objectif), assurez-vous que la règle "Autoriser" contient "Tous les utilisateurs" dans la colonne des utilisateurs.

Ensuite, dans "Authentification", assurez-vous qu'il n'y a pas de conflits et que seule l'authentification anonyme est activée.

J'espère que cela pourra aider.


1
Autoriser - Tous les utilisateurs - Hérité
mxmissile
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.