Question

Comment résoudre le problème de boucle infinie connexion lorsque vous utilisez les sessions et cookieless ne pouvez pas changer le nom de login.aspx à un HttpHandler?

i.e.. Lorsqu'un utilisateur avec des droits d'administrateur clique sur le bouton de fermeture de session et l'URL de retour à une page restreinte est passée à Login.aspx alors un autre utilisateur sans droits d'administrateur tentent de de se connecter ils sont redirigés vers la page de connexion.

Je suis venu à travers cette mais je ne peux pas changer le nom de connexion. ASPX à un gestionnaire de http, et la fonction IsAuthenticated ne semble pas travailler dans la page ASPX avec cookieless auth parce que le billet des formes semble être dépouillé de l'URL lorsque redirigé vers la page de connexion.

EDIT:

Parce que cette application est déjà en production, je ne peut pas modifier le flux de la page de connexion / déconnexion / processus de délai d'attente ou renommer la page de connexion.

Était-ce utile?

La solution

Vérifier si l'utilisateur est autorisé à accéder à la page dans le returnUrl, après l'enregistrement sur la page login.aspx. Vous pouvez utiliser cette méthode de la UrlAuthorizationModule (ou par une autre si elle fonctionne le mieux pour vous):

System.Web.Security.UrlAuthorizationModule.CheckUrlAccessForPrincipal(

     returnUrl,
     userPrincipal, 
     GET");

Si l'utilisateur n'est pas autorisé, simplement rediriger vers une page que l'utilisateur peut accéder.

Pour l'utilisateur principal:

var roles = System.Web.Security.Roles.GetRolesForUser(username);

var principal = new System.Security.Principal.GenericPrincipal(

   new System.Security.Principal.GenericIdentity(username), 

   roles

);

Autres conseils

Nous avons eu un problème similaire, et je l'ai fixé procédant comme suit:

If "LogOut".Equals(e.CommandName) Then
    FormsAuthentication.SignOut()
    Response.Redirect("~/Login.aspx")
End If

Et puis en Login.aspx nous changeons la PostBackUrl à Login.aspx si elle contient un paramètre ReturnUrl qui envoie l'utilisateur à Login.aspx.

Quelques options ...

One, rediriger manuellement au Login.aspx lorsqu'un utilisateur est connecté, donc il n'y a pas ReturnURL. Avoir une méta-refresh sur vos pages qui correspond au délai d'attente de la session afin que l'utilisateur ne clique pas sur les ressources qu'ils peuvent soudainement pas accès.

Deux, toujours vous quelqu'un dans le Page_Load de Login.aspx. Hey, pourquoi pas? Je peux penser à quelques raisons, mais peut-être qu'ils ne sont pas applicables à votre situation.

Trois, ignorer le ReturnURL. Vous ne devez pas appeler RedirectFromLoginPage! Redirigent l'utilisateur vers une page de destination par défaut lors de la connexion.

Pouvez-vous modifier le flux de la page?

Ce que je veux dire est, plutôt rediriger vers la page login.aspx lorsqu'un utilisateur n'a pas accès à une ressource, les rediriger vers une page d'information.

Cette page explique les raisons de la redirection, et leur donne des options comme:

1. Click here to login as another user.
2. Click here to request access to the page.
3. Click here to login again, if your session has expired.

supprimerait la référence circulaire, et donc le problème.

Qu'en est-il d'ajouter un module http qui vérifie si le Request.UrlReferrer est la page de connexion et si oui vérifie s'ils sont autorisés à accéder au Request.Url et sinon les redirige vers un « Vous n'êtes pas autorisé à afficher cette page « . page.

Bien que vous dites que vous ne pouvez pas changer le nom de login.aspx à un gestionnaire HTTP, vous avez essayé d'ajouter une redirection HTTP 301 de sorte que chaque fois login.aspx est demandé au serveur redirige l'utilisateur vers un gestionnaire HTTP par exemple login.ashx?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top