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 procmon
renvoie 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
la source
Html.RenderAction
, puisHtml.Action
j'ai réalisé que Razor utilisait mes recherches initiales.Réponses:
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.la source
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.
la source
Vous aurez ce même comportement lorsque vous avez un filtre pour l'autorisation personnalisée qui hérite de
AuthorizeAttribute
et un ou plusieurs appels à laOnAuthorization
méthode, l'un d'eux étant définiAuthorizationContext.Result
sur `HttpUnauthorizedResult 'la source
Pour une raison quelconque, cela a résolu mon problème.
la source
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.
la source