WEB.CONFIG y AUTHENTICATE

02/06/2005 - 02:53 por Jose Fernandez | Informe spam
Hola mi gente

tengo una duda

Yo tengo una carpeta a la cual nadie que no se haya logueado puede entrar.
Esa carpeta es Admin
dentro de esa carpeta yo tengo un web.config con este codigo
<configuration>
<system.web>
<authorization>
<deny users="?" />
</authorization>
<globalization requestEncoding="UTF-8" responseEncoding="UTF-8" />
</system.web>
</configuration>

ahora bien. en el web.config general del sitio tengo este pedazo de codigo
<authentication mode="Forms">
<forms name=".NACIONALES" loginUrl="Admin/login.aspx"
protection="All" timeout="60" />
</authentication>

Esto me permite que los usuarios que no esten registrados puedan entrar a
esa pagina de esa carpeta Admin exclusivamente para registrarse y asi poder
tener acceso total a todas las paginas de Admin.

MI PREGUNTA

Yo ahora tengo una segunda carpeta que necesito proteger al igual pero que
es para los usuarios, no para los administradores.
La Carpeta digamos se llama MiZona. Dentro pongo el mismo webconfig
protegiendola de usuarios no registrados.
Podria yo poner en el web.config general otra linea agregando la pagina de
registro:

<authentication mode="Forms">
<forms name=".NACIONALES" loginUrl="Admin/login.aspx"
protection="All" timeout="60" />
<forms name=".NACIONALES" loginUrl="MiZona/login.aspx"
protection="All" timeout="60" />
</authentication>

De ser asi, se me ocurre que quizas para el sistema es lo mismo que entren
por admin o mizona pues estarian en efectos de logueados OK. claro, se
podria resolver con una variable de session que identificaria que tipo de
usuario se registro para proteger el acceso a cada una de las carpetas.

Que piensan?

Saludos
 

Leer las respuestas

#1 A.Poblacion
02/06/2005 - 08:21 | Informe spam
"Jose Fernandez" wrote in message
news:
Yo tengo una carpeta a la cual nadie que no se haya logueado puede entrar.
Esa carpeta es Admin
dentro de esa carpeta yo tengo un web.config con este codigo
<configuration>
<system.web>
<authorization>
<deny users="?" />
</authorization>
<globalization requestEncoding="UTF-8" responseEncoding="UTF-8" />
</system.web>
</configuration>

ahora bien. en el web.config general del sitio tengo este pedazo de codigo
<authentication mode="Forms">
<forms name=".NACIONALES" loginUrl="Admin/login.aspx"
protection="All" timeout="60" />
</authentication>

Esto me permite que los usuarios que no esten registrados puedan entrar a
esa pagina de esa carpeta Admin exclusivamente para registrarse y asi


poder
tener acceso total a todas las paginas de Admin.

MI PREGUNTA

Yo ahora tengo una segunda carpeta que necesito proteger al igual pero que
es para los usuarios, no para los administradores.
La Carpeta digamos se llama MiZona. Dentro pongo el mismo webconfig
protegiendola de usuarios no registrados.
Podria yo poner en el web.config general otra linea agregando la pagina de
registro:

<authentication mode="Forms">
<forms name=".NACIONALES" loginUrl="Admin/login.aspx"
protection="All" timeout="60" />
<forms name=".NACIONALES" loginUrl="MiZona/login.aspx"
protection="All" timeout="60" />
</authentication>

De ser asi, se me ocurre que quizas para el sistema es lo mismo que entren
por admin o mizona pues estarian en efectos de logueados OK. claro, se
podria resolver con una variable de session que identificaria que tipo de
usuario se registro para proteger el acceso a cada una de las carpetas.



Si lo que quieres es que en una carpeta entren solo ciertos usuarios y en
la otra los administradores, lo que deberias hacer es utilizar roles, y en
el web config poner
<authorization>
<allow roles="Administradores" />
<deny roles="*" />
</authorization>
Esto permite entrar a los administradores y cerrar el paso a los demás.
Para que esto funcione, tienes que asignarle un rol al usuario durante el
login. La forma de hacerlo es que en el login.aspx, en lugar de hacer el
FormsAuthentication.RedirectFromLoginPage que probablemente estás metiendo
ahora mismo, le creas directamente la cookie de autenticacion (new
FormsAuthenticationTicket(...)) y en el parámetro UserData le pones el rol o
roles, la cifras (FormsAuthentication.Encrypt), creas la cookie, y saltas a
la dirección original (FormsAuthentication.GetRedirectUrl). Después te vas
al global.asax y en el evento Authenticate_Request decodificas la cookie,
sacas los roles, creas un GenericPrincipal, y se lo asignas al Context.User.
Asi a primera vista parece complicado, pero son solo unas pocas lineas de
código y una vez que las hayas puesto te vale para siempre. Solo tienes que
poner en el web.config los <authorization> que quieras con los <location
path=...> que te dé la gana, y tienes control completo sobre qué usuarios
pueden acceder a qué directorios y/o páginas.

Preguntas similares