2011-10-06 211 views
12

Tengo una aplicación web ASP.NET escrita en VB.NET. Una parte de la aplicación realiza una llamada AJAX a un archivo ASMX interno que a su vez hace una llamada a un servicio web remoto que es solo un único archivo ASMX. Normalmente esto funciona bien y se ha implementado un par de veces y funciona bien. Sin embargo un cliente, es conseguir que el mensaje de la llamada AJAX:La solicitud HTTP no está autorizada con el esquema de autenticación de cliente 'Anónimo'. El encabezado de autenticación recibido del servidor fue 'NTLM'

La petición HTTP no está autorizado con el esquema de autenticación de cliente 'Anonymous'. El encabezado de autenticación recibido del servidor fue 'NTLM'.

He recorrido una gran cantidad de sitios web tratando de solucionar esto, pero parece que no encuentro ninguna respuesta que me sirva.

No he podido replicar el error en mi servidor de prueba, que es el mismo que el del cliente, Win2003 IIS6.

El servicio web remoto se implementa en Windows 2008 r2 - IIS7.5. El servicio remoto se implementa utilizando solo la autenticación 'Anónimo'. La implementación del cliente está configurada con Anónimo y 'Autenticación integrada de Windows'. He intentado cambiar los niveles de autenticación en ambas implementaciones pero no puedo replicar el problema. Lo más cerca que he llegado es cuando me puse la autenticación del servicio IIS remoto para

la solicitud HTTP no está autorizado con el esquema de autenticación de cliente 'NTLM'. El encabezado de autenticación recibido del servidor fue ''.

En el archivo web.config la referencia al servicio remoto es:

<system.serviceModel> 
    <bindings> 
     <basicHttpBinding> 
      <binding name="SVCMappingSoap" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true"> 
       <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384"/> 
       <security mode="None"> 
        <transport clientCredentialType="None" proxyCredentialType="None" realm=""/> 
        <message clientCredentialType="UserName" algorithmSuite="Default"/> 
       </security> 
      </binding> 
     </basicHttpBinding> 
    </bindings> 
    <client> 
     <endpoint address="http://svc.website.com/services/myService.asmx" binding="basicHttpBinding" bindingConfiguration="SVCMappingSoap" contract="SVCMappingService.SVCMappingSoap" name="SVCMappingSoap"/> 
    </client> 
</system.serviceModel> 

He intentado cambiar un número de la configuración en la sección <security> pero aún incapaz de replicarse.

+0

Descubrí que el cliente está utilizando un servidor proxy. La desactivación del servicio web remoto dio como resultado el mismo mensaje de error en el cliente, por lo que parece que todos los problemas se deben a su configuración de red. Configuré el enlace para usar su proxy que dio como resultado el mensaje: 'El servidor remoto devolvió una respuesta inesperada: (407) Se requiere autenticación proxy (El servidor ISA requiere autorización para cumplir con la solicitud. Se niega el acceso al filtro del proxy web.) .' He pasado el problema a quien sea responsable de la configuración de la red del cliente. – SausageFingers

+0

Hola @Fly_Trap, ¿me puede describir cómo este proxy entre usted y su endpoint estaba afectando la autorización? Tengo un problema similar en este momento, parece que el tuyo podría ayudarme. –

+0

@Johnny_D, desafortunadamente no sé cómo se configuró el proxy. – SausageFingers

Respuesta

19

No estoy seguro de la configuración total de su servidor.

<security mode="None"> 
    <transport clientCredentialType="None" proxyCredentialType="None" realm=""/> 
</security> 

en lugar de uno anterior, por favor tratar con la configuración más adelante

<security mode="TransportCredentialOnly"> 
    <transport clientCredentialType="Ntlm"/> 
    <message clientCredentialType="UserName" algorithmSuite="Default"/> 
</security> 

favor pasar por debajo de acoplamientos, puede más idea sobre esos y puede cambiar la configuración en función de sus necesidades:

+1

El truco es asegurarse de que la configuración en WCF e IIS sea la misma. Por otro lado, podemos cambiar el nivel de IIS como "anónimo". – himanshu

+0

Ya había probado esa configuración de seguridad pero el mensaje era el mismo. Ver mi comentario anterior, creo que el problema es que el cliente está utilizando un servidor proxy web. – SausageFingers

+17

Si esta respuesta no resuelve su problema, ¿por qué es aceptado? –

2

que tenía que cambiar el valor por defecto genera

 <security mode="Transport"/> 

en

 <security mode="Transport" > 
     <transport clientCredentialType="Ntlm"/> 
     </security> 
+0

Esto resolvió mi problema. ¡¡¡Gracias Señor!!! – papfan

0

Uno más comentario para este problema:

Si no está utilizando HTTPS,

<security mode="Transport"/> 

no es compatible. Puede usar

<security mode="TransportCredentialOnly"> 

en su lugar.

Cuestiones relacionadas