2009-09-01 10 views
3

Nous utilisons l'authentification par formulaires avec des rôles pour restreindre l'accès à certaines pages et zones d'un site Web. Lorsqu'un utilisateur n'est pas autorisé, soit parce qu'il n'est pas connecté ou qu'il n'a pas le rôle requis, il est redirigé vers la page de connexion avec une URL de retour.ASP.NET remplace le paramètre returnto par défaut dans la redirection lorsqu'un utilisateur n'est pas authentifié

Nous définissons ce que l'accès est nécessaire dans le web.config en utilisant les balises d'autorisation comme:

<authorization> 
    <deny users="?"/> 
</authorization> 

L'application Web nous travaillons utilise HttpContext.Current.RewritePath pour les URL et les plus conviviales pages dynamiques. Alors qu'une demande de "/ MesPages/MonDocuments.aspx!" Est réécrite dans "/PageTypes/Library.aspx" ou quelque chose dans ce sens

Cependant quand l'application redirige parce qu'un utilisateur n'a pas l'autorisation le ReWritePath est utilisé au lieu de l'URL Raw.

que dois-je passer outre afin que l'URL de Returnto est l'URL demandée au lieu du chemin psychique réelle?

+0

Module HTTP, basePage etc? – PortageMonkey

Répondre

0

Ce que je fini par faire était mon code dans le déplacement Application_AuthorizeRequest ce qui signifie que l'utilisateur a été authentifié avant que la page a été demandé qui a gardé l'URL d'origine intacte. Où dans le code exécutez-vous la réécriture?

1

Selon la version d'IIS (6 ou 7) vous sont en cours d'exécution, la réponse peut être différente, mais je soupçonne que le problème est que le pipeline de demandes ASP.NET authentifie d'abord l'utilisateur à l'aide de l'authentification par formulaires, puis exécute ensuite le code/module RewritePath, nous écraser le retour normal à la réponse.

Ces clés peuvent être de brancher le module de réécriture dans le pipeline plus tôt que les modules d'authentification/d'autorisation. Si vous utilisez du code brut plutôt qu'un module HTTP pour le faire dans votre classe de base, global.asax etc, vérifiez d'abord si l'utilisateur est valide/ou autorisé avant d'exécuter le code.

ASP.NET Pipeline and Thoughts on Rewriting Vs Routing

Questions connexes