Pregunta

¿Cómo resolver el problema de inicio de sesión de bucle infinito cuando se utiliza sesiones sin cookies y no se puede cambiar el nombre de Login.aspx a un HttpHandler?

es decir. Cuando un usuario con derechos de administrador pulsa el botón de cierre de sesión y la url de retorno a una página restringida se pasa a login.aspx luego otro usuario sin derechos de administrador para iniciar sesión tratan de que redirecciona a la página de inicio de sesión.

Me he encontrado con esta solución rel="noreferrer"> pero no puedo cambiar el nombre de inicio de sesión. aspx a un controlador HTTP, y la función IsAuthenticated no parecen funcionar en la página aspx con autenticación sin cookies porque billete de las formas de autenticación parece ser despojado de la dirección URL cuando redirige a la página de inicio de sesión.

EDIT:

Debido a que esta aplicación ya está en producción no puede alterar el flujo de la página del proceso de inicio de sesión / cierre de sesión / tiempo de espera o cambiar el nombre de la página de inicio de sesión.

¿Fue útil?

Solución

Comprobar si el usuario está autorizado a acceder a la página en el ReturnURL, después de entrar en la página login.aspx. Es posible utilizar este método de la UrlAuthorizationModule (o uno personalizado si funciona mejor para usted):

System.Web.Security.UrlAuthorizationModule.CheckUrlAccessForPrincipal(

     returnUrl,
     userPrincipal, 
     GET");

Si el usuario no está autorizado, simplemente redirigir a una página que el usuario puede acceder.

Para obtener el principal de usuario:

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

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

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

   roles

);

Otros consejos

Hemos tenido un problema similar y lo fijé haciendo lo siguiente:

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

Y luego, en Login.aspx cambiamos el PostBackUrl a Login.aspx si contiene un parámetro ReturnUrl que envía al usuario a Login.aspx.

A pocas opciones ...

Uno, redirigir manualmente de nuevo a Login.aspx cuando un usuario se registra, por lo que no hay ReturnURL. Tener una meta-actualización en sus páginas que coincide con el tiempo de espera de la sesión por lo que el usuario no hace clic sobre los recursos que de repente no pueden llegar.

Dos, siempre que alguien ingrese a cabo en el Page_Load de Login.aspx. Oye, ¿por qué no? Puedo pensar en algunas razones, pero tal vez no se aplican a su situación.

Tres, ignorar el ReturnURL. Usted no tiene que llamar RedirectFromLoginPage! Redirigir al usuario a una página de destino por defecto al iniciar la sesión.

Podría cambiar el flujo de la página?

Lo que quiero decir es, en lugar de redirigir a la página login.aspx cuando un usuario no tiene acceso a un recurso, redirigir a una página de información.

Esta página explica las razones de la redirección, y les da opciones como:

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.

Esto eliminaría la referencia circular, y por lo tanto el problema.

¿Qué pasa con la adición de un módulo HTTP que comprueba si el Request.UrlReferrer es la página de inicio de sesión y si es así comprueba si están autorizados para acceder a la Request.Url y si no se les redirige a una "Usted no está autorizado a ver esta página ". página.

A pesar de que decir que no puede cambiar el nombre de Login.aspx a un controlador HTTP, ¿ha intentado añadir una redirección HTTP 301 de manera que cada vez que se solicita Login.aspx el servidor redirige al usuario a un controlador HTTP, por ejemplo, login.ashx?

scroll top