2012-04-27 21 views
35

Así que aquí está el escenario, tengo una aplicación Asp.Net que está utilizando un proveedor de membresía de autenticación personalizado &, pero tenemos que permitir el acceso completamente anónimo (es decir) a una carpeta particular dentro de la aplicación.¿Permitir autenticación anónima para una sola carpeta en web.config?

En el Administrador de IIS, puede establecer el modo de autenticación de una carpeta, pero la configuración se guarda en el archivo C:\Windows\System32\inetsrv\config\applicationHost.configas described here

Para facilitar la instalación, sería genial si pudiera establecer esta dentro de mi web.config pero después de un par de intentos, creo que esto puede no ser posible.

¿Alguien sabe de otra manera?

Muchas gracias

+0

¿Por qué quiere permitir el anonimato de esa carpeta? –

+0

La mayor parte de la aplicación solo debe ser accesible para personas que han comprado acceso, pero queremos exponer algunos contenidos gratuitos al mundo exterior (para tentar a las personas a comprar acceso). –

+0

su pregunta y respuesta más comunes es muy simple dado –

Respuesta

35

Uso <location> etiqueta de configuración y <allow users="?"/> para permitir que sólo anónima o <allow users="*"/> para todos:

<configuration> 
    <location path="Path/To/Public/Folder"> 
     <system.web> 
     <authorization> 
      <allow users="?"/> 
     </authorization> 
     </system.web> 
    </location> 
</configuration> 
+10

Esto es lo que probé por primera vez pero no funciona. Sospecho que estas configuraciones de autorización de ubicación solo tienen efecto cuando se ejecuta con autenticación de formularios. –

+0

que parece ser el caso de Chris Fewtrell. Ciertamente, con la autenticación de Windows, no parece importar lo que establezca. – mattpm

2
<location path="ForAll/Demo.aspx"> 
<system.web> 
    <authorization> 
    <allow users="*" /> 
    </authorization> 
</system.web> 
</location> 

Además: Si quieres escribir algo en esa carpeta en el sitio web , debe otorgarle permiso IIS_User a la carpeta

41

El primer enfoque es modificar su Web.config utilizando la etiqueta de configuración <location> y <allow users="?"/> para permitir anónima o <allow users="*"/> para todos:

<configuration> 
    <location path="Path/To/Public/Folder"> 
     <system.web> 
     <authorization> 
      <allow users="?"/> 
     </authorization> 
     </system.web> 
    </location> 
</configuration> 

Si ese enfoque no funciona, entonces puede tomar el siguiente enfoque que requiere hacer una pequeña modificación en el applicationHost IIS .config.

En primer lugar, cambiar overrideModeDefault de la sección anonymousAuthentication de "Denegar" a "Permitir" en C: \ Windows \ System32 \ inetsrv \ config \ applicationHost.config:

<section name="anonymousAuthentication" overrideModeDefault="Allow" /> 

overrideMode es una característica de seguridad de IIS. Si no se permite la anulación a nivel del sistema en applicationHost.config, entonces no hay nada que pueda hacer en web.config para habilitarlo. Si no tiene este nivel de acceso en su sistema de destino, debe entablar conversación con su proveedor de hosting o administrador del sistema.

En segundo lugar, después de establecer overrideModeDefault="Allow" entonces usted puede poner lo siguiente en su web.config:

<location path="Path/To/Public/Folder"> 
    <system.webServer> 
    <security> 
     <authentication> 
     <anonymousAuthentication enabled="true" /> 
     </authentication> 
    </security> 
    </system.webServer> 
</location> 
+0

-1 ¿qué hay de no hospedar localy? cuando no tienes acceso al apphost.conf? – Dementic

+8

La publicación original hace referencia específica al archivo applicationHost.config. Un voto negativo en una respuesta parece duro para la publicación original que no coincide con las limitaciones específicas de su escenario. –

+0

"sería genial si pudiera configurar esto en mi web.config" – Dementic

0

para que funcione construyo mi directorio de la siguiente manera:

Proyecto Pública Restringir

Así que edité mi webconfig para mi carpeta pública:

<location path="Project/Public"> 
    <system.web> 
     <authorization> 
     <allow users="*"/> 
     </authorization> 
    </system.web> 
    </location> 

Y para mi carpeta restringida:

<location path="Project/Restricted"> 
    <system.web> 
     <authorization> 
     <allow users="?"/> 
     </authorizatio> 
    </system.web> 
    </location> 

Espero haber ayudado.

0

He añadido la web.config en la carpeta específica decir "Usuarios" (VS 2015, C#) y el siguiente código añadido

<?xml version="1.0"?> 
<configuration> 
    <system.web> 
    <authorization>  
    <deny users="?"/> 
    </authorization> 
</system.web> 
</configuration> 

Inicialmente he usado etiqueta de ubicación, pero eso no funcionó.

Cuestiones relacionadas