Désactivation de l'authentification ASP.Net WebForms pour un sous-répertoire
J'ai une grande enterprise application contenant à la fois des WebForms et MVC pages. Elle dispose de l'authentification et de l'autorisation de paramètres que je ne veux pas changer.
Les Formulaires d'authentification est configuré dans le web.config:
<authentication mode="Forms">
<forms blah... blah... blah />
</authentication>
<authorization>
<deny users="?" />
</authorization>
Assez standard jusqu'à présent. J'ai un service REST qui est partie de cette grande application, et je veux utiliser l'authentification HTTP plutôt que pour ce seul service.
Ainsi, lorsqu'un utilisateur tente d'obtenir des données JSON en provenance du RESTE du service, il renvoie une erreur HTTP 401 statut et un WWW-Authenticate
en-tête. S'ils répondent correctement avec formée HTTP Authorization
réponse il leur permet dans les.
Le problème est que WebForms remplace ce à un niveau faible - si vous revenez 401 (non autorisé), il l'emporte avec un 302 (redirection vers la page de login). C'est bien dans le navigateur, mais inutile pour un service REST.
Je veux désactiver le paramètre d'authentification web.config, en remplaçant le "reste" dossier:
<location path="rest">
<system.web>
<authentication mode="None" />
<authorization><allow users="?" /></authorization>
</system.web>
</location>
La autorisation bits fonctionne très bien, mais le authentification ligne (<authentication mode="None" />
) provoque une exception:
C'est une erreur d'utiliser une section enregistré comme allowDefinition='MachineToApplication" au-delà du niveau de l'application.
Je suis cette configuration au niveau de l'application que - c'est dans la racine web.config - et que l'erreur est pour le web.les configs dans les sous-répertoires.
Comment puis-je remplacer la authentification de sorte que tout le reste du site utilise des Formulaires d'authentification et de ce répertoire utilise aucun?
Ceci est similaire à une autre question: 401 code de réponse pour les demandes avec json ASP.NET MVCmais je ne suis pas à la recherche pour la même solution, je ne veux pas seulement de supprimer les Formulaires d'authentification et d'ajout de nouveau le code personnalisé à l'échelle mondiale, il y a beaucoup trop de risques et de travail. Je veux changer juste l'un répertoire dans le répertoire de configuration.
Mise à jour
Je veux mettre en place une application web unique et que je veux que tous les Formulaires des pages et des vues MVC pour utiliser l'authentification de Formulaires web. J'en veux un répertoire pour utiliser l'authentification HTTP de base.
Noter que je parle d'authentification, pas d'autorisation. Je veux les appels RESTE à venir avec le nom d'utilisateur & mot de passe dans un en-tête HTTP, et je veux WebForm & MVC pages à venir avec le cookie d'authentification de .Net - dans les deux cas, l'autorisation est fait à l'encontre de notre DB.
Je ne veux pas réécrire les Formulaires d'authentification et de rouler mes propres cookies - il semble ridicule, que c'est la seule façon d'ajouter une HTTP autorisé RESTE une application.
Je ne peux pas ajouter une application ou un répertoire virtuel - il faut que ce soit comme une application.
source d'informationauteur Keith
Vous devez vous connecter pour publier un commentaire.
Si "reste" est tout simplement un dossier dans la racine de votre vous y êtes presque:
supprimer l'authentification de la ligne c'est à dire
Alternativement, vous pouvez ajouter un site web.config pour votre repos dossier et ont juste ceci:
Vérifier cette.
J'ai travaillé autour de ce la manière désordonnée par l'usurpation de l'authentification de Formulaires dans le monde.asax pour toutes les pages existantes.
Je n'ai toujours pas tout à fait ce travail, mais il va quelque chose comme ceci:
Je ne suis pas vraiment heureux avec ce qu'un correctif - il semble comme un horrible hack et la ré-invention de la roue, mais il semble que c'est la seule façon pour mes Formulaires-authentifié pages et HTTP authentifié RESTE à travailler dans la même application.
Je me suis retrouvé avec le même problème exact, l'article suivant m'a orienté dans la bonne direction: http://msdn.microsoft.com/en-us/library/aa479391.aspx
MADAME est exactement ce que vous êtes après, plus précisément, vous pouvez configurer le FormsAuthenticationDispositionModule pour désactiver l'authentification par formulaires "supercherie", et l'empêcher de changer le code de réponse de 401 à 302. Cela devrait se traduire dans votre repos client reçoit la auth défi.
MADAME la page de Téléchargement: http://www.raboof.com/projects/madam/
Dans mon cas, le RESTE des appels sont faits pour les contrôleurs (c'est un MVC basé app) dans le "API"
la zone. MADAME discriminateur est définie par la suivante configuracion:
Alors tout ce que vous avez à faire est d'ajouter MADAME module à votre site web.config
N'oubliez pas d'ajouter le valide les articles sur le web.config (AFIN de ne pas me laisser coller le code), vous pouvez obtenir un exemple de projet web dans le téléchargement.
Avec cette configuration, toute demande faite à l'Url commençant par "API/" permettra d'obtenir une réponse 401 au lieu de 301 produite par l'Authentification de Formulaires.
J'ai été en mesure d'obtenir ce pour travailler sur un projet précédent, mais il a besoin de l'aide d'un module HTTP pour effectuer la coutume de l'authentification de base, depuis la validation du compte est à l'encontre d'une base de données plutôt que Windows.
J'ai mis en place le test que vous avez spécifié avec un une application web à la racine du site web de test, et un dossier contenant le RESTE du service. La config à la racine de l'application a été configuré de manière à refuser tous les accès:
J'ai eu ensuite pour créer une application pour le RESTE du dossier dans IIS, et place un site web.fichier de configuration dans le RESTE du dossier. Dans cette config, j'ai précisé les éléments suivants:
J'ai aussi eu au fil de http module dans les endroits appropriés dans le RESTE du répertoire config. Ce module doit aller dans un répertoire bin dans le RESTE du répertoire. J'ai utilisé Dominick Baier personnalisé module d'authentification de base, et que le code est situé ici. Cette version est plus IIS 6 spécifique, cependant il existe une version pour IIS 7, ainsi que sur les codeplexmais je n'ai pas fait de test que l'on (avertissement: la IIS6 version n'a pas le même nom de l'assembly et de l'espace de noms du IIS7 version.) J'aime vraiment cette base module auth, car il peut être branché directement dans ASP.NET's modèle d'adhésion.
La dernière étape était de s'assurer que l'accès anonyme a été admis à la fois à la racine de l'application et le RESTE d'application dans IIS.
J'ai inclus le plein de configs ci-dessous à des fins d'exhaustivité. L'application de test était juste un ASP.NET web formulaire de demande généré à partir de VS 2010, il a été à l'aide de la AspNetSqlProfileProvider pour le fournisseur d'appartenances; voici la config:
Le RESTE répertoire contenu vide ASP.NET projet généré à partir de VS 2010, et j'ai mis un seul fichier ASPX dans le, cependant le contenu du RESTE du dossier n'a pas ont à un nouveau projet. Juste de laisser tomber dans un fichier de config après le répertoire a eu une application associée avec il devrait fonctionner. La config pour que le projet suit:
J'espère que cela va répondre à vos besoins.
Cela peut ne pas être la plus élégante de solutions, mais je pense que c'est un bon début
1)Créer un HttpModule.
2)gérer l'AuthenticateRequest événement.
3)dans le gestionnaire d'événements vérifier que la demande est dans le répertoire que vous souhaitez autoriser l'accès.
4)Si c'est pour régler manuellement la auth cookie: (ou voir si vous pouvez trouver une autre façon maintenant que vous avez un contrôle et d'authentification n'est pas encore arrivé)
5) Oh presque oublié, vous souhaitez assurez-vous que l'auth cookie a été désactivée si la demande n'est pas dans le répertoire que vous avez voulu accorder l'accès.
Après avoir regardé vos commentaires à ma réponse précédente, je me demandais si vous pourriez avoir votre web app automatiser le déploiement d'une application sur votre REPOS répertoire. Qui vous permettrait d'avoir les avantages d'une deuxième application, et permettrait également de réduire le déploiement de charge sur votre système admins.
Je pensais que vous pourriez mettre une routine dans la
Application_Start
méthode de la mondiale.asax, qui permettrait de contrôler que le RESTE du répertoire existe, et qu'il n'a pas déjà une application associée. Si le test renvoie la valeur true, alors le processus de l'association d'une nouvelle application pour le RESTE répertoire se produit.Une autre pensée que j'ai eu était que vous pourriez utiliser WIX (ou une autre technologie de déploiement) pour construire un package d'installation que vos admins peuvent exécuter pour créer l'application, cependant, je ne pense pas que ce soit automatique comme ayant l'app configurer sa dépendance.
Ci-dessous, j'ai inclus un exemple de mise en œuvre qui vérifie IIS pour un répertoire donné et s'applique à une application si elle n'en a pas déjà un. Le code a été testé avec IIS 7, mais devrait fonctionner sur IIS 6.
Certaines parties de ce code est venu de ici. Bonne chance avec votre app!
.NET 4.5, vous pouvez maintenant définir
Consulter cette page: https://msdn.microsoft.com/en-us/library/system.web.httpresponse.suppressformsauthenticationredirect.aspx