web-dev-qa-db-fra.com

Authentification par formulaire en ignorant le document par défaut

J'ai passé une journée et demie à essayer de résoudre ce problème. Fondamentalement, avoir un site Web ASP.net avec l'authentification par formulaires sur IIS7 en utilisant Framework 4.0.

Le processus d'autorisation semble fonctionner parfaitement pour chaque scénario, à l'exception du fait de le frapper sans document spécifié (doit être résolu en document par défaut).

Par exemple (s'il vous plaît ne soyez pas dur sur le site, il est toujours en cours de développement;)), http://www.rewardroster.com/Default.aspx fonctionne parfaitement, cette page doit permettre un accès immédiat comme spécifié dans le web.config.

mais si je clique sur www.rewardroster.com, il redirige directement vers la page de connexion avec Return URL défini sur "/" ou Login.aspx? ReturnUrl =% 2f

Certaines choses que j'ai essayées:

1) Définissez l’authentification sur Aucune, puis le document par défaut a fonctionné, ce n’est donc pas le problème.

2) Ajout de l'attribut DefaultDocument à Web.config

3) Suppression de toutes les entrées de la liste de documents par défaut dans IIS à l'exception de Default.aspx

4) Ajout de l'entrée MachineKey dans Config

5) Basculé du pipeline intégré au pipeline classique dans IIS 

Voici ce qu'il y a dans ma config:

  <authentication mode="Forms">
    <forms name="appNameAuth" loginUrl="Login.aspx" protection="All" timeout="60" slidingExpiration="true" defaultUrl="Default.aspx" path="/">
    </forms>
  </authentication>
  </authentication>

 <location path="Default.aspx">

Merci beaucoup pour votre temps et espérons que quelqu'un sait ce qui se passe ici.

32
SpartanSoft

C'était ma solution:

Dans Global.asax, méthode: Application_BeginRequest, placez les éléments suivants:

if (Request.AppRelativeCurrentExecutionFilePath == "~/")  
   HttpContext.Current.RewritePath("HomePage.aspx");

Simple et agréable, vous avez la possibilité de créer une logique autour de la page d'accueil que vous souhaitez utiliser si votre site Web utilise plusieurs pages d'accueil en fonction de variables de configuration. 

Dmitry.Alk

38
Dmitry.Alk

Je voyais ce même problème en essayant de trouver le chemin racine et j'ai essayé tout ce qui a été mentionné précédemment. Il semble que Asp.net 4.0 ajoute deux modules ExtensionlessUrl à applicationhost.config pour IIS 7. Vous pouvez supprimer ces modules en ajoutant ce qui suit à votre web.config

<system.webServer>
  <handlers>
    <remove name="ExtensionlessUrl-Integrated-4.0"/>
    <remove name=" ExtensionlessUrl-ISAPI-4.0_32bit "/>
  </handlers>
</system.webServer>

Information additionnelle

Microsoft KB

Comment les URL sans extension sont gérées par asp net v4

8
Gregory Ostermayr

Ce que j'ai finalement fait pour résoudre ce problème est d'écrire quelques lignes de code dans ma page de connexion pour rechercher un Request.QueryString ["ReturnUrl"] de "/". S'il l'a trouvé, il a été redirigé vers default.aspx.

Je ne trouvais AUCUN moyen de créer une authentification par formulaire sans intercepter les appels sans page spécifiée (par exemple, www.monsite.com). :( J'ai même essayé le routage d'URL .NET 4 et cela n'empêchait pas Authentification par formulaires de détourner la demande.

Voici le code que j'ai utilisé dans login.aspx:

protected void Page_Load(object sender, EventArgs e)
{
    if (!(IsPostBack || IsAsync))
    {
        string returnUrl = Request.QueryString["ReturnUrl"];
        if (returnUrl != null)
            if (returnUrl == "/")
                Response.Redirect("default.aspx");
    }
}
3
Kasey Speakman

J'avais un problème similaire. Pas de styles quand je ne suis pas connecté, www.site.nl\redirigé vers la page de connexion (avec une URL de redirection vers une page d'accueil) et en saisissant www.site.nl\Home (même page d'accueil que l'URL de redirection mentionnée avant) n'a pas besoin d'un login.

La solution était:

  • Ouvrez IIS
  • Ouvrez IIS: Authentification
  • Ouvrir et éditer l'accès anonyme
  • Vérifier l'utilisateur (j'ai changé l'utilisateur en utilisateur app.pool)
  • Donner des droits d'utilisateur sur la racine du site (sur le système de fichiers)

Cela a fonctionné pour moi.

Bonne chance

3
Johan van Dijke

La solution de Johan a fonctionné pour moi, mais uniquement si la demande concernait la racine du site.

Mon site est organisé comme ceci:

  • www. [mysite] .com/login.aspx
  • www. [mysite] .com/default.aspx
  • www. [mysite] .com/[somestuff] /default.aspx
  • www. [mysite] .com/[morestuff] /default.aspx

Après avoir suivi le bon conseil de Johan, les demandes adressées à www. [Mysite] .com ont été dirigées vers la page de connexion aux formulaires et, après la connexion, à la page par défaut. Cependant, si quelqu'un demandait "/ [somestuff] /", cela ne fonctionnerait toujours pas.

Je l'ai fait fonctionner en activant l'authentification anonyme sur les répertoires [somestuff] et [morestuff], puis en la désactivant sur les fichiers individuels de ces répertoires. Ce n’est pas une configuration de sécurité que je veux supporter, étant donné que les gens pourraient soit obtenir l’intérêt de default.aspx, soit demander simplement [somestuff] /default.aspx pour commencer. Mais maintenant je sais pourquoi il échoue. Il semble que vous ayez besoin d’un accès anonyme aux répertoires sur lesquels vous souhaitez utiliser des documents par défaut.

1
Brad

Je rencontre le même problème et résolu de cette façon:

dans Global.asax à côté de la solution Dmitry.Alk, j’ai ajouté:

    if (Request.AppRelativeCurrentExecutionFilePath.ToLower() == "~/default.aspx")
        HttpContext.Current.RewritePath("Default.aspx");
    if (Request.AppRelativeCurrentExecutionFilePath.ToLower() == "~/")
        HttpContext.Current.RewritePath("Default.aspx");
    if (Request.AppRelativeCurrentExecutionFilePath.ToLower() == "~")
        HttpContext.Current.RewritePath("Default.aspx");
0
blagojap

J'ai eu un problème similaire aujourd'hui. J'essayais d'utiliser le pipeline intégré pour sécuriser des ressources nonasp.net (fichiers statiques, php, etc.).

J'avais une règle dans ma racine web.config, puis j'autorisais l'accès à des ressources spécifiques au cas par cas.

Cela fonctionnait sauf que les requêtes sur "/" ne pouvaient jamais être authentifiées (redirigeant sans cesse vers la page de connexion), alors que les requêtes sur "/Default.aspx" étaient correctes.

Mon problème était dû au fait que le module Asp.Net UrlAuthentication était activé pour tous les types de ressources et qu'apparemment cela ne fonctionnait pas pour mon scénario. Au lieu de cela, je devais modifier ce module pour ne travailler que sur les ressources gérées et installer l'authentification d'URL non gérée d'IIS7. Je devais ensuite configurer cela (car il utilise des paramètres d'authentification différents) et m'assurer que le RoleManager était activé pour les ressources non gérées (puisque je m'authentifiais sur des rôles). Cette URL pourrait être utile: http://learn.iis.net/page.aspx/142/understanding-iis-70-url-authorization/

0
davesw