Foros del Web » Programación para mayores de 30 ;) » .NET »

global.asax en asp.net 2.0

Estas en el tema de global.asax en asp.net 2.0 en el foro de .NET en Foros del Web. Hola a todos. Voy al grano: Tenemos acabada una aplicacion web en ASP.NET 1.1. Ahora queremos migrar a 2.0. La autentificación de los usuarios en ...
  #1 (permalink)  
Antiguo 27/07/2006, 03:59
 
Fecha de Ingreso: julio-2006
Mensajes: 15
Antigüedad: 17 años, 9 meses
Puntos: 0
Pregunta global.asax en asp.net 2.0

Hola a todos.

Voy al grano:

Tenemos acabada una aplicacion web en ASP.NET 1.1. Ahora queremos migrar a 2.0. La autentificación de los usuarios en nuestra aplicacion se hace siguiendo el modelo de Formularios (lo del webconfig). Los usuarios pueden acceder a páginas en funcion de su rol. La autorización para ver tal o cual pagina se realiza en el global.asax. En el Application_AuthenticateRequest recupero el ticket que se guardó en una cookie cuando el usuario se identificó y en funcion del rol que guardo en el ticket miro en una base de datos si el usuario tiene acceso o no. Al migrar a 2.0 nos llevamos una sorpresa y aqui está mi duda:

El evento Application_AuthenticateRequest del global.asax "salta" no solo cuando el usuario final pide una página sino que salta por ejemplo al cargar las imagenes de la pagina solicitada, también pide iconos, controles, etc... Alguién sabe por qué ocurre esto. Creemos que este comportamiento puede ralentizarnos la aplicación.

Un Saludo. Gracias.
  #2 (permalink)  
Antiguo 27/07/2006, 08:35
Avatar de moNTeZIon  
Fecha de Ingreso: enero-2005
Ubicación: Lliçà de Munt - BCN
Mensajes: 1.625
Antigüedad: 19 años, 4 meses
Puntos: 9
Hola Robert y bienvenido!
Una cosa, por qué haces las comprobaciones en el Global.asax?
Si has implementado la seguridad por formularios, es muy fácil especificar en web.config los accesos a cada página, también con programación declarativa, a través de los "location path".
Por otro lado, creo que NET 1.1 no soportaba roles, pero ahora que NET 2.0 soporta roles, todo eso puedes hacerlo en web.config, especificando para cada página qué roles se permiten y qué roles no..
Espero haberte dicho algo nuevo.
Saludos.
__________________
..:: moNTeZIon ::..
  #3 (permalink)  
Antiguo 27/07/2006, 10:10
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 3 meses
Puntos: 50
Cita:
Iniciado por moNTeZIon
Una cosa, por qué haces las comprobaciones en el Global.asax?
Si has implementado la seguridad por formularios, es muy fácil especificar en web.config los accesos a cada página,
solo para aclarar las cosas de hecho muchos proyectos que tengo también hago las autenticaciones mediante el global.asax para cargar todo el perfil del usuario para cargar roles de forma dinámica, ya que a diferencia de colocarlos en el web.config no los puedes hacer tan dinámicos y con ello se hace un poco mas cerrada la aplicacion... te pongo un ejemplo de como lo hago:

Código:
protected void Application_AuthenticateRequest(Object sender, EventArgs e)
		{
			if (Request.IsAuthenticated) {
				String[] roles;

                                      if ((Request.Cookies["siteRoles"] == null) || (Request.Cookies["siteRoles"].Value == "")) {
                                    BLL.Account account = new CNCApp.BLL.Account();
                                 roles = account.GetRoles(User.Identity.Name);

                                  String sRoles = "";
					foreach (string role in roles) {
						sRoles += role;
						sRoles += ";";
					}

					FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
						1,								
						Context.User.Identity.Name,			
						DateTime.Now,						
						DateTime.Now.AddHours(1),			
						false,							
						sRoles							
						);

					string sCookie = FormsAuthentication.Encrypt(ticket);
					
					Response.Cookies["siteRoles"].Value = sCookie;
					Response.Cookies["siteRoles"].Path = "/";
					Response.Cookies["siteRoles"].Expires = DateTime.Now.AddMinutes(20);
				}
				else {
					FormsAuthenticationTicket ticket = 
						FormsAuthentication.Decrypt(Context.Request.Cookies["siteRoles"].Value);
					ArrayList userRoles = new ArrayList();
					
					foreach (String role in ticket.UserData.Split( new char[] {';'} )) {
						userRoles.Add(role);
					}
					roles = (String[]) userRoles.ToArray(typeof(String));
				}
				Context.User = new GenericPrincipal(Context.User.Identity, roles);
				
			}

		}
Cita:
Iniciado por moNTeZIon
es muy fácil especificar en web.config los accesos a cada página, también con programación declarativa, a través de los "location path".
precisamente por eso se crea una cookie persistente para cargar el profile de cada usuario y ya despues desde código puedes crear un método compartido por ejemplo IsInRoles para mostrarle o no determinada pagina, control, informacion, etc..etc..

Cita:
Iniciado por Robert79
Al migrar a 2.0 nos llevamos una sorpresa
te recomiendo que te des una vuelta por aqui para que te des una mejor idea.

http://msdn.microsoft.com/msdnmag/is...NET20Security/
http://aspnet.4guysfromrolla.com/articles/120705-1.aspx

Salu2 y cualquier cosa por aqui andaremos..
__________________
Nadie roba nada ya que en la vida todo se paga . . .

Exentrit - Soluciones SharePoint & Net
  #4 (permalink)  
Antiguo 27/07/2006, 12:29
Avatar de moNTeZIon  
Fecha de Ingreso: enero-2005
Ubicación: Lliçà de Munt - BCN
Mensajes: 1.625
Antigüedad: 19 años, 4 meses
Puntos: 9
Hola Root,
Me perdí un poco
Entonces, Application_AuthenticateRequest se ejecuta solo en la solicitud de las paginas que están protegidas en el web.config?
A qué te refieres con
Cita:
Iniciado por RootK
en el web.config no los puedes hacer tan dinámicos
Para hacer más comprobaciones, a parte de roles o nombres de usuario?
Saludos.
__________________
..:: moNTeZIon ::..
  #5 (permalink)  
Antiguo 27/07/2006, 14:59
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 3 meses
Puntos: 50
Cita:
Entonces, Application_AuthenticateRequest se ejecuta solo en la solicitud de las paginas que están protegidas en el web.config?
el Application_AuthenticateRequest siempre se ejecuta no importa que tipo de autenticación estés usando y se ejecutan en el siguiente orden:

Cita:
* Application_BeginRequest
* Application_AuthenticateRequest
* Application_AuthorizeRequest
* Application_ResolveRequestCache
* Application_AcquireRequestState
* Application_PreRequestHandlerExecute
* Application_PreSendRequestHeaders
* Application_PreSendRequestContent
* Application_PostRequestHandlerExecute
* Application_ReleaseRequestState
* Application_UpdateRequestCache
* Application_EndRequest
Cita:
Para hacer más comprobaciones, a parte de roles o nombres de usuario?
para ese caso guardas los perfiles del usuario el la BD, teniendo por ejemplo la tabla Usuarios, Roles y UsuarioRoles, y por ejemplo en otra tabla llamada modulos cargas esos perfiles guardando los Id´s para indicar a que tienen derecho de ver y de hacer... claro que todavía hay mas cosas a considerar esa es solo una parte para que te vayas dando una mejor idea..
  #6 (permalink)  
Antiguo 28/07/2006, 00:48
 
Fecha de Ingreso: julio-2006
Mensajes: 15
Antigüedad: 17 años, 9 meses
Puntos: 0
Muchas gracias a todos por el interes. Nuestro codigo del Application_AuthenticateRequest se parece mucho al expuesto por RootK. De todas formas mi duda no es como implementar la autentificación basada en roles de forma dinámica, eso ya lo resolvimos en ASP.NET 1.1 ( bueno ahora parece que nos lo han cambiado con las APIs de pertenecia y los modelos de proveedores, aunque esa es otra historia) sino por qué con ASP.NET 2.0 el Application_AuthenticateRequest "salta" cada vez que cargo en una pagina una imagen, un icono, un control, un archivito en javascript,etc.... He implementado algunas soluciones para probar este comportamiento y no consigo que el Application_AuthenticateRequest "salte" con las imagenes, aunque sí con los controles.

No se si pudo originarse algún problema cuando se migró toda la solución o si mi modo de probar es correcto: Pongo un breakpoint en el Application_AuthenticateRequest y añado una linea tal que esta: string line= this.Request.Url.ToString(). Al ver el string line observo que petición provoca el evento y veo que se piden imagenes,iconos, etc...

Gracias a todos.
  #7 (permalink)  
Antiguo 02/12/2008, 09:25
 
Fecha de Ingreso: octubre-2007
Mensajes: 8
Antigüedad: 16 años, 6 meses
Puntos: 0
Exclamación Respuesta: global.asax en asp.net 2.0

Hola tengo el mismo problema, entrra a ese evento cuando carga imágenes o archivos de recursos y en mi caso si no hay na imágen entran al evento el el global.asax para "cachar el error" si sabes algo por favor postealo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:22.