5

Tengo una aplicación ASP.NET existente que implementa Autenticación de formularios en todo el sitio. La aplicación se implementa en varias instancias (por ejemplo, customer1, customer2, test, dev, etc ...), con una base de datos separada por instancia. SSL está en juego. La configuración de la instancia se realiza a través de un archivo de configuración XML.Servicio web ASP.NET dentro de la aplicación Autenticación de formularios

Tengo un nuevo requisito para permitir la carga/descarga de ciertos datos, que me gustaría implementar como un servicio web público.

Mi idea inicial aquí era deshabilitar selectivamente la autenticación de formularios para un subdirectorio de la aplicación (por ejemplo, ~/Servicios), y luego realizar la autenticación a través de un encabezado SOAP o similar.

Sin embargo, no estoy encontrando la forma de desactivar selectivamente las formas auth.

Pregunta: ¿Hay alguna manera de hacer esto? Probé la < ubicación > etiqueta en la configuración web en vano.

De no ser así, ¿cuáles son sus recomendaciones sobre cómo configurar esto? Puedo pensar en las siguientes opciones:

1) Crear un nuevo proyecto de "Servicios" en mi solución, y luego configurar una aplicación IIS ASP.NET por separado en ese directorio en cada instancia. (Pro: fácil acceso a la configuración de la instancia, que puede ser necesaria en el futuro. Con: carga de configuración para cada instancia relevante).

2) Cree una solución de "Servicios" separada que haga referencia a los ensamblajes necesarios de la solución de la aplicación y que los aloje como una aplicación ASP.NET separada. A continuación, busque la cadena de conexión db en función del nombre de usuario proporcionado en el encabezado SOAP. (Pro: aplicación única para configurar en IIS. Con: No hay acceso fácil a la configuración de la instancia)

3) ??

Aclaración: Vi la respuesta aquí: Override ASP.NET forms authentication for a single page, pero el uso de una etiqueta de ubicación no está ayudando (las solicitudes del servicio web aún se redireccionan). Las secciones relevantes en mi web.config este aspecto:

<system.web> 
    <authentication mode="Forms"> 
    <forms loginUrl="Login.aspx"/> 
    </authentication> 
    <authorization> 
    <deny users="?"/> 
    <allow users="*"/> 
    </authorization> 
</system.web> 

<location path="~/Services/MyService.asmx"> 
    <system.web> 
    <authentication mode="None" /> 
    <authorization> 
     <allow users="*" /> 
    </authorization> 
    </system.web> 
</location> 
+3

Cada vez que todos los que he usado la etiqueta de ubicación en un web.config el camino ha sido en forma de "Servicios/MyService.asmx" no "~/Servicios/MyService.asmx" ¿Usted ha intentado especificando sin la tilde-slash? –

+0

Eso fue todo. Podría jurar que había probado 3 versiones diferentes de eso. Esta vez cerré el navegador y tu solución funcionó a la perfección. – dividius

Respuesta

4

yo creo que la etiqueta de ubicación funcionaría, donde se especifica la carpeta de servicios y permitir que todos los usuarios, algo así como:

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

Pero dijiste que no funcionó, ¿has intentado poner un archivo web.config en la carpeta de servicios y deshabilitar la autenticación de formularios y permitir a todos los usuarios en ese archivo?

+0

Como indiqué anteriormente, el error que cometí fue especificar "~ \ Services" para la ruta, en lugar de solo "Services" – dividius

+0

Me alegro de que esté funcionando, la vergüenza de asp.net es inconsistente en dónde puedes usar el ~/me ha pillado en un par de ocasiones –

0

También podría tener un archivo web (overriding) web.config en la carpeta de servicios con el control de acceso configurado en anónimo.

0

lo que funcionó para mí fue permitir a los usuarios acceder a todos los usuarios en la carpeta donde se encuentran mis servicios web. Primero agregué un archivo de configuración en esa carpeta e inserté el código a continuación para permitir a todos los usuarios.

<authorization> 
     <allow users="*"/> 
     </authorization> 
    </system.web> 
Cuestiones relacionadas