web-dev-qa-db-fra.com

Forms auth redirection css / script inclut vers la page de connexion avec HTTP 302

J'ai quelques inclusions sur une page de connexion, un fichier css et un fichier js.

<link rel="stylesheet" type="text/css" href="../../ext/resources/css/ext-all.css" />
<script type="text/javascript" src="../../ext/bootstrap.js"></script>

Malheureusement, les demandes du navigateur pour ces derniers obtiennent la réponse 302. Forms Auth considère la demande comme non autorisée et les redirige vers la page de connexion. Il ne se rend pas compte que la demande provient en premier lieu de la page de connexion.

GET http://localhost:50880/ext/resources/css/ext-all.css HTTP/1.1

HTTP/1.1 302 Found
<html><head><title>Object moved</title></head><body>
<h2>Object moved to <a href="/Account/LogOn?ReturnUrl=%2fext%2fresources%2fcss%2fext-all.css">here</a>.</h2>
</body></html>

Je pensais que peut-être aider à définir les autorisations du dossier includes (ext) pour tout le monde.

Je n'ai pas eu ce problème dans d'autres projets.

43
Dan Revell

Vous devez exclure les fichiers css et les images de l'authentification comme suit dans le fichier de configuration. En utilisant la balise d'emplacement, vous pouvez exclure un seul fichier ou un répertoire.

<location path="<RELATIVE_PATH_OF_YOUR_RESOURCE_FILES>">
    <system.web>
        <authorization>
            <allow users="*"/>
        </authorization>
    </system.web>
</location>
31
PSK

J'ai eu le même problème. Voici comment je l'ai résolu.

Dans IIS7, cliquez sur votre site Web, puis double-cliquez sur le bouton Authentification. Cliquez sur Authentification anonyme, puis sur le lien Modifier ... à droite. Assurez-vous que la case à cocher "Identité du pool d'applications" est cochée.

Mon pool d'applications s'exécute sous l'utilisateur "Network Service" (et non "ApplicationPoolIdentity"). Vous pouvez choisir l'identité dans les paramètres avancés de votre pool d'applications dans IIS. Cet utilisateur a eu un accès complet au système de fichiers du site Web.

72
David Conlisk

Alors, voici ce que j'ai fait qui a entièrement résolu le problème.

Tout d'abord, j'ai apporté le changement au web.config comme tout le monde a dit de le faire.

J'utilise l'authentification anonyme dans IIS, et comme indiqué dans ce problème, je suis entré dans IIS> Pools d'applications> Clic droit sur mon pool d'applications> Modifier> changé le pool d'applications pour utiliser le pool d'applications Identité.

ALORS - Je suis allé dans le dossier parent qui contient mon site, je suis entré dans les autorisations pour ce dossier et j'ai ajouté le compte NETWORK SERVICE du serveur pour accéder au dossier. Ça l'a fait pour moi. C'est parce que le pool d'applications s'exécute sous ApplicationPoolIdentity, qui est le compte NETWORK SERVICE sur la machine locale.

J'espère que cela aide quelqu'un!

7
vcuankit

Le problème que j'ai eu à ce sujet était que j'avais téléchargé un plugin jquery depuis Internet et l'avais copié dans mon répertoire de contenu sur le serveur Web et que Windows avait bloqué tous les fichiers en dessous afin qu'ils ne puissent pas être correctement accédés par le serveur Web. Le déblocage des fichiers dans Windows a résolu le problème.

5
MikeD

Réponse tardive ici, mais je voulais aider à faire la lumière sur ce problème IIS. (voir ce que j'ai fait?)

Tout d'abord, je veux dire que la réponse de David Conlisk est la réponse sûre-clou-il-dans-la-tête-fix-it-chaque-fois. Mais au cas où vous seriez comme moi et que vous auriez déployé de nombreuses applications avec des formulaires et une authentification anonyme où l'identité d'authentification anonyme est définie sur IUSR et tout à coup, je vois ce problème maintenant, alors écoutez comment J'ai reproduit le problème et j'espère être épargné par le même sort.


Ma pratique standard consiste à exécuter AppPoolIdentity de mon application Web en tant que Service résea. Ensuite, je vais simplement dans le répertoire réel sur le disque vers lequel pointe le répertoire virtuel -> clic droit -> Propriétés -> Onglet Sécurité -> Modifier -> Ajouter l'utilisateur du service réseau -> Accorder des autorisations de lecture/écriture.

Ensuite, j'active l'authentification anonyme sur les répertoires dont j'ai besoin (js, css, etc.) L'identité du pool d'applications est IUSR par défaut.

D'ACCORD. Maintenant, tout à coup, dans mon environnement de développement, je commence à recevoir 302 redirections d'authentification de formulaires sur tous mes CSS et JS! Qu'est-il arrivé? J'ai fait un basculement SVN sur mon application web vers une branche différente dans le contrôle de code source. Pouah. Il a complètement détourné toutes mes autorisations sur le disque pour chaque fichier. La seule façon dont j'ai pu résoudre ce problème est de supprimer l'intégralité de l'application Web, d'effectuer une nouvelle vérification et de réappliquer les autorisations de lecture du service réseau (ou d'appliquer des autorisations sur chaque fichier ... et oui, j'ai essayé suppression et ré-ajout des autorisations sur le dossier de niveau parent).

Donc cette fois, je décide "bon sang avec ça. J'exécute mon application web en tant que Système local. Cela montrera les autorisations du disque dont le patron. Cela a fonctionné pour moi de temps en temps comme un court solution de contournement. " Mais hélas, pas aujourd'hui. Je vous jure qu'avant mes yeux, je regarde deux déploiements d'une application web d'authentification par formulaires avec exactement la même configuration et le problème 302 ne se reproduit que sur ma machine de développement. La seule différence est le récent commutateur SVN sur ma machine.

Dès que je me connecte et que j'obtiens un cookie d'authentification par formulaire, les fichiers js et css se téléchargent très bien.


Restez avec moi, je viens de faire une découverte choquante. Tous les serveurs sur lesquels j'ai déployé ceci ont autorisations de lecture accordées à MACHINE_NAME\Users. Et ma machine de développement ne fonctionne pas. Une fois que j'ai ajouté cela à ma machine de développement, j'ai pu télécharger mon css.


TLDR;

La morale de l'histoire est que vous pouvez conserver l'identité d'authentification anonyme comme IUSR, mais vous devez ensuite accorder à tous les utilisateurs des autorisations de lecture sur votre application Web sur le disque.

Comme c'est une mauvaise idée (pour des raisons de sécurité), je vais faire de ma nouvelle pratique l'adoption de la réponse de David C et faire en sorte que l'identité d'authentification anonyme s'exécute en tant qu'identité du pool d'applications.

2
C. Tewalt