2011-08-17 26 views
8

Estamos en el proceso de desarrollar un servicio web WCF REST que simplemente recibe un montón de texto arbitrario de cualquier usuario anónimo y luego realiza algún procesamiento en el back-end.WCF REST Service - 401 No autorizado

Por ejemplo, aquí está un método de nuestro servicio web:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)] 
public class MyRESTService : IMyRESTService 
{ 
    [WebInvoke(Method = "PUT", UriTemplate = "/MyRESTMethod?paramA={paramA}&paramB={paramB}")] 
    public Stream MyRESTMethod(string paramA, string paramB, Stream rawData) 
    { 
     //do some stuff... 
    } 
} 

Si nos limitamos a usar la configuración por defecto de IIS obtenemos un (401) Unauthorized. Sin embargo, después de mucho ensayo y error, descubrimos que podíamos hacer que funcionase dando acceso ESCRIBIR a 'Todos' en el archivo .svc real de nuestro servicio.

Mi pregunta es: ¿por qué en el mundo necesitaría IIS tener acceso ESCRIBIR a un archivo .svc para que esto funcione? ¿Hay una manera mejor o estoy atrapado con esta solución temporal hackish (y posiblemente insegura)?

WTF Microsoft?

posiblemente relacionados:

+0

Los derechos de acceso no necesariamente tienen que ser concedida a "Todo el mundo". En cambio, el usuario autenticado debe tener estos derechos. Para acceso anónimo esto es IUSR. – chiccodoro

Respuesta

7

Después de hablar con un representante técnico de M $ se me informó que este es el comportamiento esperado. El servicio debe tener habilitado el acceso de escritura para que alguien le envíe una solicitud y, cuando lo haga, también establecerá el acceso de escritura automáticamente en el archivo .SVC.

+0

¡Me salvaste el día! Por cierto: al pensarlo por segunda vez, tiene sentido: cuando solicita un PUT en un recurso, ese recurso debe permitir el acceso de escritura. Ahora, supongo que REST con WCF probablemente se implemente de modo que IIS interprete un PUT /foobar.svc/some/path como una solicitud PUT en /foobar.svc y reenvía la parte "/ some/path" a WCF para una interpretación posterior. Entonces, para IIS, esta es una solicitud PUT en /foobar.svc - en HTTP hablando: Usted quiere modificar foobar.svc – chiccodoro

9

También he encontrado esto se puede solucionar poniendo

<authentication mode="None" /> interior de <system.web> en sus web.config

+0

, esto también me ayudó, pero ¿es seguro? –

+0

Depende de su entorno. En mi caso, confiamos en que la red era segura, y tal vez eso sea suficiente. Si necesita autenticación directa entre servicios, obviamente esto será un problema. – captncraig

Cuestiones relacionadas