Domanda

Come si risolve il problema infinito ciclo di accesso quando si utilizza le sessioni senza cookie e non è possibile modificare il nome di login.aspx ad un HttpHandler?

vale a dire. Quando un utente con privilegi di amministratore preme il pulsante di logout e l'url ritorno ad una pagina riservata è passato a Login.aspx poi un altro utente senza privilegi di amministratore tenta di per effettuare il login ottengono reindirizzato alla pagina di login.

Mi sono imbattuto in questa soluzione rel="noreferrer"> ma non posso cambiare il nome di login. aspx ad un gestore HTTP, e la funzione IsAuthenticated non sembrano funzionare nella pagina aspx con cookie di autenticazione perché le forme auth biglietto sembra essere spogliato dal URL quando reindirizzato alla pagina di login.

Modifica

Poiché questa applicazione è già in produzione non può alterare il flusso pagina del / logout processo di login / timeout o rinominare la pagina di login.

È stato utile?

Soluzione

Verifica se l'utente è autorizzato ad accedere alla pagina in ReturnURL, dopo il login nella pagina login.aspx. Si potrebbe utilizzare questo metodo del UrlAuthorizationModule (o uno personalizzato se funziona meglio per voi):

System.Web.Security.UrlAuthorizationModule.CheckUrlAccessForPrincipal(

     returnUrl,
     userPrincipal, 
     GET");

Se l'utente non è autorizzato, solo reindirizzare a una pagina che l'utente può accedere.

Per ottenere il principale utente:

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

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

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

   roles

);

Altri suggerimenti

Abbiamo avuto un problema simile, e ho fissato nel seguente modo:

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

E poi in Login.aspx cambiamo il PostBackUrl per Login.aspx se contiene un parametro ReturnUrl che invia l'utente alla Login.aspx.

A poche opzioni ...

Uno, reindirizzare manualmente torna a Login.aspx quando un utente è disconnesso, quindi non c'è ReturnURL. Avere un meta refresh sulle tue pagine che corrisponde al timeout di sessione in modo che l'utente non fa clic su risorse che improvvisamente non può arrivare a.

Due, accedere sempre qualcuno nel Page Load di Login.aspx. Ehi, perché no? Mi vengono in mente alcuni motivi, ma forse non si applicano alla vostra situazione.

Tre, ignorare il ReturnURL. Non è necessario chiamare RedirectFromLoginPage! Reindirizzare l'utente a una pagina di destinazione predefinita su login.

Potrebbe cambiare il flusso pagina?

Quello che voglio dire è, piuttosto che reindirizzare indietro alla pagina Login.aspx quando un utente non ha accesso a una risorsa, li reindirizza a una pagina di informazioni.

Questa pagina spiega le ragioni del redirect, e dà loro opzioni come:

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.

Ciò rimuovere il riferimento circolare, e quindi il problema.

Che dire l'aggiunta di un modulo HTTP che controlla se l'Request.UrlReferrer è la pagina di login e in tal caso i controlli se sono autorizzati ad accedere al Request.Url e non loro se reindirizza a un "Tu non sei autorizzato a visualizzare questa pagina ". pagina.

Anche se dire che non è possibile modificare il nome di login.aspx a un gestore HTTP, hai provato ad aggiungere un reindirizzamento HTTP 301 in modo che ogni volta che viene richiesto login.aspx server reindirizza l'utente ad un gestore HTTP per esempio login.ashx?

scroll top