with the solicitud está esquema con cliente autorizada autenticación wcf ntlm anonymous wcftestclient negotiate

wcf - solicitud - the http request is unauthorized with client authentication scheme basic



WCFTestClient La solicitud HTTP no está autorizada con el esquema de autenticación de cliente ''Anónimo'' (9)

Creé un servicio WCF y lo implementé en el servidor. Cuando navego en este servicio, me da una respuesta positiva con? Wsdl URL. Ahora estoy tratando de probar el servicio a través del cliente de Prueba WCF. Muestra los metadatos apropiados. Pero cuando trato de invocar cualquiera de los métodos desde el servicio, me muestra una excepción ... aquí están los detalles de erro con el seguimiento de la pila ...

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 ''Negociar, NTLM''.

Rastro de la pila del servidor:

a
System.ServiceModel.Channels.HttpChannelUtilities.ValidateAuthentication (solicitud HttpWebRequest, respuesta HttpWebResponse, WebException responseException, fábrica HttpChannelFactory)
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 ''Negociar, NTLM''.

Rastro de la pila del servidor:

a
System.ServiceModel.Channels.HttpChannelUtilities.ValidateAuthentication (solicitud HttpWebRequest, respuesta HttpWebResponse, WebException responseException, fábrica HttpChannelFactory)

Enlaces de cliente:

<bindings> <wsHttpBinding> <binding name="WSHttpBinding_IServiceMagicService" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false"> <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" /> <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false" /> <security mode="None"> <transport clientCredentialType="Windows" proxyCredentialType="None" realm="" /> <message clientCredentialType="Windows" negotiateServiceCredential="true" establishSecurityContext="true" /> </security> </binding> </wsHttpBinding> </bindings>

Enlaces del servidor:

<bindings> <wsHttpBinding> <binding name="WSHttpBinding_SEOService" closeTimeout="00:10:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:10:00" bypassProxyOnLocal="true" transactionFlow="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="999524288" maxReceivedMessageSize="655360000" messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false"> <readerQuotas maxDepth="32" maxStringContentLength="900000" maxArrayLength="900000" maxBytesPerRead="900000" maxNameTableCharCount="900000" /> <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false" /> <security mode="None"> <transport clientCredentialType="Windows" proxyCredentialType="None" realm="" /> <message clientCredentialType="Windows" negotiateServiceCredential="true" establishSecurityContext="true" /> </security> </binding> <binding name="WSHttpServiceMagicBinding" closeTimeout="00:10:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:10:00" bypassProxyOnLocal="true" transactionFlow="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="999524288" maxReceivedMessageSize="655360000" messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false"> <readerQuotas maxDepth="32" maxStringContentLength="900000" maxArrayLength="900000" maxBytesPerRead="900000" maxNameTableCharCount="900000"/> <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false"/> <security mode="None"> <transport clientCredentialType="Windows" proxyCredentialType="None" realm=""/> <message clientCredentialType="Windows" negotiateServiceCredential="true" establishSecurityContext="true"/> </security> </binding> </wsHttpBinding> </bindings>

Sección del cliente del cliente:

<client> <endpoint address="http://hydwebd02.solutions.com/GeoService.Saveology.com/ServiceMagicService.svc" binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IServiceMagicService" contract="IServiceMagicService" name="WSHttpBinding_IServiceMagicService" /> </client>

Sección de servicios del servidor:

<services> <service behaviorConfiguration="GeoService.Saveology.com.CityStateServiceProviderBehavior" name="GeoService.Saveology.com.CityStateServiceProvider"> <endpoint binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_SEOService" contract="SEO.Common.ServiceContract.ICityStateService" /> <endpoint address="mex" binding="mexHttpBinding" bindingConfiguration="" contract="IMetadataExchange" /> </service> <service behaviorConfiguration="GeoService.Saveology.com.ServiceMagicServiceProviderBehavior" name="GeoService.Saveology.com.ServiceMagicServiceProvider"> <endpoint binding="wsHttpBinding" bindingConfiguration="WSHttpServiceMagicBinding" contract="SEO.Common.ServiceContract.IServiceMagicService"> </endpoint> <endpoint address="mex" binding="mexHttpBinding" bindingConfiguration="" contract="IMetadataExchange" /> </service> </services>


Acabo de tener este problema en una máquina de desarrollo (la producción funciona bien). Modifico mi configuración en IIS para permitir el acceso anónimo y poner mi nombre y contraseña como credencial.

No es la mejor manera, estoy seguro, pero funciona con fines de prueba.


Esto es lo que tuve que hacer para que esto funcione. Esto significa:

  1. Custom UserNamePasswordValidator (sin necesidad de una cuenta de Windows, SQLServer o ActiveDirectory - su UserNamePasswordValidator podría tener un nombre de usuario y contraseña codificados, o leerlos desde un archivo de texto, MySQL o lo que sea).
  2. https
  3. IIS7
  4. .net 4.0

Mi sitio se administra a través de DotNetPanel. Tiene 3 opciones de seguridad para directorios virtuales:

  1. Permitir acceso anónimo
  2. Habilitar autenticación básica
  3. Habilitar la autenticación integrada de Windows

Solo se necesita "Permitir el acceso anónimo" (aunque eso, por sí solo, no fue suficiente).

Ajuste

proxy.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;

No hizo la diferencia en mi caso.

Sin embargo, el uso de este enlace funcionó:

<security mode="TransportWithMessageCredential"> <transport clientCredentialType="Windows" /> <message clientCredentialType="UserName" /> </security>


Intente proporcionar el nombre de usuario y la contraseña en su cliente como a continuación

client.ClientCredentials.UserName.UserName = @ "Domain / username"; client.ClientCredentials.UserName.Password = "contraseña";


No tenía control sobre la configuración de seguridad para el servicio al que estaba llamando, pero obtuve el mismo error. Pude arreglar mi cliente de la siguiente manera.

  1. En la configuración, configure el modo de seguridad:

    <security mode="TransportCredentialOnly"> <transport clientCredentialType="Windows" proxyCredentialType="None" realm="" /> <message clientCredentialType="UserName" algorithmSuite="Default" /> </security>

  2. En el código, configure la clase proxy para permitir la suplantación (agregué una referencia a un servicio llamado cliente):

    Customer_PortClient proxy = new Customer_PortClient(); proxy.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;


Otra posible solución a este error que encontré. Puede que no haya respondido la pregunta exacta de OP, pero puede ayudar a otros que encuentren este mensaje de error.

Estaba creando mi cliente en código usando WebHttpBinding, para replicar la siguiente línea:

<security mode="TransportCredentialOnly"> <transport clientCredentialType="Windows" proxyCredentialType="Windows" /> </security>

Tenía que hacer:

var binding = new WebHttpBinding(WebHttpSecurityMode.TransportCredentialOnly); binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows; binding.Security.Transport.ProxyCredentialType = HttpProxyCredentialType.Windows;

así como establecer proxy.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;


Tengo un problema similar, ¿has probado?

proxy.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;


Tuve el mismo error hoy, después de implementar nuestro servicio llamando a un servicio externo al entorno de ensayo en azul. El servicio local llamó al servicio externo sin errores, pero después del despliegue no lo hizo.

Al final resultó ser que el servicio externo tiene una validación de IP. El nuevo entorno en Azure tiene otra IP y fue rechazado.

Entonces, si alguna vez obtiene este error llamando a servicios externos

Puede ser una restricción de IP.


Tuve un problema similar e intenté con todo lo sugerido anteriormente. Luego intenté cambiar clientCreditialType por Basic y todo funcionó bien.

<basicHttpBinding> <binding name="BINDINGNAMEGOESHERE" > <security mode="TransportCredentialOnly"> <transport clientCredentialType="Basic"></transport> </security> </binding> </basicHttpBinding>


Veo que esto aún no ha sido respondido, esta es una cita exacta de aquí :

WSHttpBinding intentará realizar una negociación interna en la capa SSP. Para que esto sea exitoso, deberá permitir el anonimato en IIS para el VDir. WCF ejecutará por defecto un SPNEGO para credenciales de ventana. Permitir el anonimato en la capa de IIS no permite que nadie entre, se difiere a la pila de WCF.

Encontré esto a través de: http://fczaja.blogspot.com/2009/10/http-request-is-unauthorized-with.html

Después de buscar en Google: http://www.google.tt/#hl=en&source=hp&q=+The+HTTP+request+is+unauthorized+with+client+authentication+scheme+%27Anonymous