Forms Authentification Ignoring Default Document

j'ai passé un jour et demi à essayer de résoudre ce problème. Bascially ont un ASP.net site Web avec authentification des formulaires sur IIS7 à L'aide du Framework 4.0.

Le truc D'autorisation semble fonctionner parfaitement pour chaque scénario à l'exception de le frapper sans aucun document spécifié (devrait résoudre à Doc par défaut).

Par exemple (Merci de ne pas être sévère sur son site encore être développé ;) ), http://www.rewardroster.com/Default.aspx travaux parfaitement, cette page devrait permettre anon accès spécifié dans le web.config.

mais si je frappe www.rewardroster.com directement il redirige vers la page d'ouverture de session avec L'URL de retour définie à "/" ou L'ouverture de session.aspx?Returl=%2f

Certaines choses que j'ai essayé:

1) définit L'authentification à None et puis le document par défaut a fonctionné de sorte que ce n'est pas le problème.

2) a ajouté l'attribut DefaultDocument à Web.config

3) supprimé tous entrées pour dans la liste des documents par défaut dans IIS sauf pour la liste par défaut.aspx

4) Ajout D'une entrée MachineKey dans la configuration

5) basculé de pipeline intégré à pipeline classique dans IIS

voici ce qu'il y a dans ma configuration:

  <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 j'espère que quelqu'un sait ce qui se passe ici.

32
demandé sur SpartanSoft 2010-09-29 23:03:46

7 réponses

C'était ma solution:

Global.asax, la méthode: Application_BeginRequest, placez le code suivant:

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

simple et efficace, et vous aurez une chance de construire la logique autour de ce que la page d'accueil que vous souhaitez utiliser si votre site web utilise plusieurs pages d'accueil basée sur les variables de configuration.

Dimitri.Alk

37
répondu Dmitry.Alk 2012-05-07 15:49:19

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

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

Renseignements Supplémentaires

Microsoft KB

Comment extensionless url sont traitées par asp net v4

8
répondu Gregory Ostermayr 2011-07-07 13:17:30

j'ai eu un problème similaire. Pas de styles quand je n'étais pas connecté, www.site.nl\ redirigé vers la page de connexion (avec une url de redirection vers une page d'accueil) et entrant www.site.nl\Home (même page d'accueil que l'url de redirection mentionnée ci-dessus) n'a pas besoin d'un login.

Solution:

  • Open IIS
  • Ouvrir IIS: Authentification
  • ouvrir et éditer L'accès anonyme
  • Vérifier (j'ai changé l'utilisateur de l'application.utilisateur de la piscine)
  • Donner droits de l'utilisateur sur la racine du site (sur le système de fichiers)

ça a fonctionné pour moi.

Bonne chance

3
répondu Johan van Dijke 2010-09-30 14:15:01

ce que j'ai fini par faire pour corriger ceci est d'écrire quelques lignes de code dans ma page de connexion pour vérifier une requête.QueryString ["Returl"] of"/". Si elle a trouvé cela, alors elle a redirigé vers la valeur par défaut.aspx.

Je n'ai pu trouver aucun moyen de faire des formulaires authentification ne pas intercepter les appels sans une page spécifiée (par exemple www.mysite.com). : (J'ai même essayé le routage .NET 4 URL et cela n'a pas empêché L'authentification des formulaires de détourner la requête non plus.

ci-dessous est le code que j'ai utilisé connexion.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
répondu Kasey Speakman 2010-10-18 18:59:41

la solution de Johan a fonctionné pour moi, mais seulement si la demande était pour la racine du site.

Mon site est organisé comme ceci:

  • www.[monsite].com/login.aspx
  • www.[monsite].com/default.aspx
  • www.[monsite].com/[somestuff]/par défaut.aspx
  • www.[monsite].com/[morestuff]/par défaut.aspx

après avoir suivi les bons conseils de Johan, demande à www.[mysite].com a été dirigé vers la page de connexion des formulaires, et après la connexion, la page par défaut. Cependant, si quelqu'un demandait "/[somestuff]/", cela ne marcherait toujours pas.

j'ai réussi à le faire fonctionner en activant l'authentification anonyme sur les répertoires [somestuff] et [morestuff], puis en le désactivant sur les fichiers individuels dans ces répertoires. Ce n'est pas une configuration de sécurité que je veux soutenir, étant donné que les gens peuvent obtenir où ils vont à partir de défaut.aspx ou simplement requesting [somestuff] / default.aspx pour commencer. Mais maintenant je sais pourquoi il échoue. Il semble vous avez besoin d'un accès anonyme aux répertoires sur lesquels vous souhaitez utiliser des documents par défaut.

1
répondu Brad 2011-05-26 16:16:01

j'ai eu un problème similaire aujourd'hui. J'ai essayé d'utiliser le pipeline intégré pour sécuriser non-asp.net ressources (fichiers statiques, php, etc.).

j'avais une règle dans mon réseau racine.config qui a eu , ensuite, j'ai été de permettre l'accès à des ressources spécifiques sur une base de cas par cas.

cela a fonctionné sauf que les requêtes vers " /"ne pouvaient jamais être authentifiées (redirigeant sans cesse vers la page de connexion), alors que les requêtes vers" / Default.aspx" étaient très bien.

mon problème était parce que le Asp.Net le module UrlAuthentication a été activé pour tous les types de ressources, et apparemment cela ne fonctionne pas pour mon scénario. Au lieu de cela, j'ai dû changer ce module pour travailler uniquement pour les ressources gérées et installer l'authentification url non gérée de IIS7. J'ai ensuite dû configurer cela (puisqu'il utilise différents paramètres d'authentification), et m'assurer que le RoleManager était activé pour les ressources non gérées (puisque je m'authentifiais sur les rôles). Cette URL peut être utile: http://learn.iis.net/page.aspx/142/understanding-iis-70-url-authorization/

0
répondu davesw 2010-12-16 20:02:15

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

Mondiale.asax à côté de Dmitry.Alk solution que 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
répondu blagojap 2013-01-25 12:05:08