2009-08-30 12 views
19

En su mayor parte, mi aplicación requiere autenticación para hacer cualquier cosa. Hay algunas páginas, a saber, la página de inicio, a las que me gustaría que las personas puedan acceder sin autenticarse.¿Cómo otorgo acceso anónimo a una url usando FormsAuthentication?

En concreto, me gustaría permitir el acceso anónimo a estas direcciones:

/home 
/default.aspx 

estoy usando MVC asp.net y FormsAuthentication. Ambas URL apuntan a la misma vista:

/home/index.aspx 

Aquí está mi configuración actual en web.config.

<authentication mode="Forms"> 
    <forms loginUrl="~/Account/LogOn" timeout="2880" />  
</authentication> 
<authorization>   
    <deny users="?" />  
</authorization> 

La lectura de la documentación de la etiqueta de la autorización, que dice "Configura la autorización para una aplicación web, el control de acceso de los clientes a los recursos de URL." Parece que debería poder usar la etiqueta de autorización para especificar una url y permitir el acceso.

Algo así como:

<authentication mode="Forms"> 
    <forms loginUrl="~/Account/LogOn" timeout="2880" />  
</authentication> 

<authorization>   
    <deny users="?" />  
</authorization> 

<authorization url="/default.aspx">   
    <allow users="?" />  
</authorization> 

<authorization url="/home">   
    <allow users="?" />  
</authorization> 

Respuesta

39

odio a responder a mi propia pregunta, pero desde que hice terminan averiguarlo, supongo que me gustaría compartir el conocimiento.

Utilice la etiqueta de ubicación y coloque las etiquetas de permitir y denegar en el orden correcto.

La etiqueta de ubicación se puede usar para configurar un recurso de URL específico. En mi caso, quería configurar algunas urls y carpetas específicamente.

Esto no funcionó al principio porque no tenía permiso/denegación en el orden correcto. Según MSDN, "el módulo de autorización otorga o deniega el acceso a un recurso de URL dependiendo de si la primera regla de acceso encontrada es una regla de permitir o negar".

En mi caso, necesitaba poner todas mis cosas públicas primero (default.aspx, inicio, estilos, imágenes, scripts) y luego puse una negación en todo lo demás. Dejé fuera el camino en la última etiqueta de ubicación. Eso hace que se aplique a todos los archivos y subcarpetas.

El resultado final, un usuario puede llegar a la página de inicio, tire hacia arriba de las imágenes y estilos, pero para todo lo demás debe conectarse

aquí está mi Web archivo de configuración ahora:.

<!--AUTHORIZATION AND AUTHENTICATION RULES--> 
    <location path="default.aspx"> 
    <system.web> 

     <authorization> 
     <allow users="?"/> 
     </authorization> 
    </system.web> 

    </location> 

    <location path="Home"> 
    <system.web> 

     <authorization> 
     <allow users="?"/> 
     </authorization> 
    </system.web> 

    </location> 

    <location path="Styles"> 
    <system.web> 

     <authorization> 
     <allow users="?"/> 
     </authorization> 
    </system.web> 

    </location> 

    <location path="Scripts"> 
    <system.web> 

     <authorization> 
     <allow users="?"/> 
     </authorization> 
    </system.web> 

    </location> 

    <location path="images"> 
    <system.web> 

     <authorization> 
     <allow users="?"/> 
     </authorization> 
    </system.web> 

    </location> 

    <location allowOverride="true"> 
    <system.web> 
     <authentication mode="Forms"> 
     <forms loginUrl="~/Account/LogOn" timeout="2880" slidingExpiration="true" /> 
     </authentication> 
     <authorization> 
     <deny users="?" /> 
     </authorization> 
    </system.web> 
    </location> 

    <!--END AUTHORIZATION AND AUTHENTICATION RULES--> 
+13

Por qué la modestia y el CW? Si termina respondiendo su propia pregunta y publicando la solución, no solo se está ayudando a sí mismo, sino a otros. Sé orgulloso y toma el cheque. Gracias por participar. –

+0

Realmente luché con esto por alrededor de 3 horas ayer después de buscar en Google múltiples respuestas plausibles. Fue el orden lo que pareció marcar la diferencia y muchas gracias por destacar eso. Gracias por publicar. – nealkernohan

+0

En MVC 4 solo necesita permitir al usuario el controlador que desea. No es necesario agregar un acceso especial a los estilos/scripts/etc. carpetas como eso ya está hecho. También mueva el contenido de la anulación que tiene en su lugar al nodo principal system.web. –

Cuestiones relacionadas