visual studio microsoft español descargar community asp.net webforms forms-authentication cookieless

studio - Asp.net forma el bucle de inicio de sesión de autenticación



visual studio installer (6)

¿Cómo se soluciona el problema del bucle de inicio de sesión infinito cuando se utilizan 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 golpea el botón de cerrar sesión y la URL de retorno a una página restringida se pasa a login.aspx, entonces otro usuario sin derechos de administrador intenta iniciar sesión y se le redirige a la página de inicio de sesión.

Me he encontrado con esta solución, pero no puedo cambiar el nombre de login.aspx a un manejador de http, y la función de autenticación no parece funcionar en la página aspx con autenticación sin cookies porque el ticket de autenticación de formularios parece estar eliminado de la URL cuando se redirige a la página de inicio de sesión.

EDITAR:

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


¿Podrías cambiar el flujo de la página?

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

Esta página explica los motivos 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.


Tuvimos un problema similar, y lo solucioné 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 de nuevo a Login.aspx.


¿Qué tal si agregamos un módulo http que comprueba si Request.UrlReferrer es la página de inicio de sesión y, de ser así, comprueba si está autorizado para acceder al Request.Url y, si no lo hace, lo redirecciona a "No tiene autorización para ver esta página". página.


Aunque diga que no puede cambiar el nombre de login.aspx a un manejador HTTP, ¿ha intentado agregar un redireccionamiento HTTP 301 para que cada vez que se solicite login.aspx el servidor redirija al usuario a un controlador HTTP, por ejemplo, login.ashx?


Compruebe si el usuario está autorizado para acceder a la página en returnUrl, después de iniciar sesión en la página login.aspx. Puede usar este método del UrlAuthorizationModule (o uno personalizado si funciona mejor para usted):

System.Web.Security.UrlAuthorizationModule.CheckUrlAccessForPrincipal( returnUrl, userPrincipal, GET");

Si el usuario no está autorizado, solo redirija a una página a la que el usuario puede acceder.

Para obtener al usuario Principal:

var roles = System.Web.Security.Roles.GetRolesForUser(username); var principal = new System.Security.Principal.GenericPrincipal( new System.Security.Principal.GenericIdentity(username), roles );


Algunas opciones ...

Uno, redirige manualmente a Login.aspx cuando un usuario está desconectado, por lo que no hay ReturnURL. Tenga una meta actualización en sus páginas que coincida con el tiempo de espera de la sesión para que el usuario no haga clic en los recursos a los que de repente no puedan acceder.

Dos, siempre inicie sesión con alguien 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, ignora el ReturnURL. ¡No tiene que llamar a RedirectFromLoginPage! Redirija al usuario a una página de inicio predeterminada al iniciar sesión.