Frage

Wie beurteilen Sie die unendliche Login Schleife Problem lösen, wenn Sie Sitzungen ohne Cookies verwenden und können den Namen von login.aspx zu einer Änderung Httphandler?

d. Wenn ein Benutzer mit Administratorrechten die Logout-Button trifft und die Rückkehr URL zu einer eingeschränkten Seite geleitet wird, ein anderer Benutzer login.aspx dann ohne Admin-Rechte versuchen, um mich einzuloggen sie weitergeleitet zurück zur Login-Seite.

Ich habe über diese Lösung kommen aber ich kann nicht den Namen des Login ändern. aspx auf einen http-Handler und die IsAuthenticated Funktion scheint nicht in der aspx-Seite mit cookieless auth zu arbeiten, weil die Ticket auth Formen scheint aus der uRL abgezogen werden, wenn auf die Login-Seite umgeleitet zurück.

EDIT:

Da diese Anwendung bereits in der Produktion ist, kann ich nicht den Seitenfluss des Login / Logout / Timeout Prozesses verändern oder die Login-Seite umbenannt.

War es hilfreich?

Lösung

Überprüfen Sie, ob der Benutzer die Seite in der returnUrl zuzugreifen berechtigt ist, nach der Anmeldung auf der login.aspx Seite. Sie könnten diese Methode des UrlAuthorizationModule (oder einen benutzerdefinierten ein, wenn es am besten für Sie):

System.Web.Security.UrlAuthorizationModule.CheckUrlAccessForPrincipal(

     returnUrl,
     userPrincipal, 
     GET");

Wenn der Benutzer nicht berechtigt ist, umleiten nur auf eine Seite, die der Benutzer zugreifen kann.

die Benutzer Auftraggeber erhalten:

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

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

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

   roles

);

Andere Tipps

Wir hatten ein ähnliches Problem, und ich regelte es wie folgt vor:

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

Und dann in Login.aspx ändern wir die PostBackUrl Login.aspx, wenn es einen ReturnUrl Parameter enthält, die die Benutzer zurück zu Login.aspx senden.

Ein paar Optionen ...

Ein, Umleitung manuell zurück zu Login.aspx, wenn ein Benutzer abgemeldet ist, so gibt es keine ReturnURL ist. Haben Sie einen Meta-Refresh auf Ihren Seiten, die den Session-Timeout übereinstimmt, damit der Benutzer klickt nicht auf Ressourcen, die sie plötzlich nicht mehr bekommen.

Zwei, immer jemand melden Sie sich in der Page_Load von Login.aspx aus. Hey, warum nicht? Ich kann aus irgendwelchen Gründen denken, aber vielleicht haben sie gelten nicht für Ihre Situation.

Drei, ignorieren Sie die ReturnURL. Sie müssen nicht RedirectFromLoginPage nennen! Leiten Sie den Benutzer auf eine Standard-Zielseite auf Login.

Könnten Sie den Seitenfluss ändern?

Was ich meine ist, dann eher auf die login.aspx Seite umleiten zurück, wenn ein Benutzer keinen Zugriff auf eine Ressource hat, leiten sie auf eine Informationsseite.

Diese Seite erklärt die Gründe für die Umleitung, und gibt ihnen Optionen wie:

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.

Dies würde die kreisförmige Referenz entfernen und somit das Problem.

Was ist ein HTTP-Modul hinzufügen, die überprüft, ob die Request.UrlReferrer die Login-Seite ist und wenn ja, überprüft, ob sie berechtigt sind, das Request.Url zuzugreifen und wenn nicht leitet sie an einem „Sie sind nicht berechtigt, diese Seite anzuzeigen .“ Seite.

Auch wenn Sie sagen, Sie nicht den Namen login.aspx an einen HTTP-Handler ändern können, haben Sie versucht, eine HTTP 301-Weiterleitung hinzugefügt, so dass, wenn login.aspx angefordert wird der Server den Benutzer auf einen HTTP-Handler leitet z.B. login.ashx?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top