example configurar .net wcf security wcf-binding

.net - configurar - wcf endpoint configuration



Error de WCF: el servicio no autenticó a la persona que llama (11)

¿Has probado el uso de basicHttpBinding en lugar de wsHttpBinding? Si no necesita ninguna autenticación y las implementaciones de Ws- * no son necesarias, probablemente sea mejor con el simple basicHttpBinding. WsHttpBinding implementa WS-Security para seguridad y autenticación de mensajes.

Estoy intentando acceder a mi servicio WCF en un servidor desde la aplicación de mi consola cliente para realizar pruebas. Estoy teniendo el siguiente error:

La persona que llama no fue autenticada por el servicio

Estoy usando wsHttpBinding . No estoy seguro de qué tipo de autenticación espera el servicio?



<behaviors> <serviceBehaviors> <behavior name="MyTrakerService.MyTrakerServiceBehavior"> <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment --> <serviceMetadata httpGetEnabled="true"/> <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information --> <serviceDebug includeExceptionDetailInFaults="false"/> </behavior> </serviceBehaviors> </behaviors>

Actualizar Funciona si cambio mi enlace a <endpoint "basicHttpBinding" ... /> (desde wsHttpBinding) en el servidor IIS 7.0 alojado, Windows 2008


¿Por qué no puede simplemente eliminar la configuración de seguridad para wsHttpBinding ("ninguno" en lugar de "mensaje" o "transporte")?


Entiendo.

Si desea usar wshttpbinding, debe agregar las credenciales de Windows como se muestra a continuación.

svc.ClientCredentials.Windows.ClientCredential.UserName = "abc"; svc.ClientCredentials.Windows.ClientCredential.Password = "xxx";

Gracias


Esto puede deberse a que el cliente se encuentra en un dominio diferente al del servidor.

Me encontré con esto cuando probaba una de mis aplicaciones desde mi PC (cliente) a mi servidor de pruebas (en la nube) y la solución más simple que podía pensar era configurar un vpn.


Nos encontramos con un problema extraño en el que la carpeta donde se hospedaba el servicio WCF tenía algunos permisos que causaban el problema.


Pude resolver el problema compartido siguiendo los pasos a continuación:

  1. Vaya a IIS -> Sitios -> Su sitio ->
  2. Características Panel de Vista -> Autenticación
  3. Establecer la autenticación anónima a deshabilitada
  4. Establecer Autenticación de Windows para Habilitar


Si está utilizando un sitio alojado como yo, la forma de evitar este problema (como se describe arriba) es estipular en el lado del host y del cliente que el modo de seguridad wsHttpBinding = NINGUNO.

Al crear el enlace, tanto en el cliente como en el host, puede usar este código:

Dim binding as System.ServiceModel.WSHttpBinding binding= New System.ServiceModel.WSHttpBinding(System.ServiceModel.SecurityMode.None)

o

System.ServiceModel.WSHttpBinding binding binding = new System.ServiceModel.WSHttpBinding(System.ServiceModel.SecurityMode.None);


Si usa basicHttpBinding, configure la seguridad del punto final en "Ninguno" y transporte clientCredintialType a "Ninguno".

<bindings> <basicHttpBinding> <binding name="MyBasicHttpBinding"> <security mode="None"> <transport clientCredentialType="None" /> </security> </binding> </basicHttpBinding> </bindings> <services> <service behaviorConfiguration="MyServiceBehavior" name="MyService"> <endpoint binding="basicHttpBinding" bindingConfiguration="MyBasicHttpBinding" name="basicEndPoint" contract="IMyService" /> </service>

Además, asegúrese de que el directorio Authentication Methods in IIS habilite el acceso anónimo


También tuve el mismo problema en wsHtppBinding . Y solo tuve que agregar el modo de security apunta a none , eso resolvió mi problema y no es necesario cambiar a basicHttpBinding . Marque Aquí y compruebe cómo deshabilitar la seguridad de WCF. Verifique el siguiente cambio de configuración para referencia:

<wsHttpBinding> <binding name="soapBinding"> <security mode="None"> <transport clientCredentialType="None" /> <message establishSecurityContext="false" /> </security> </binding> </wsHttpBinding>


establecer el acceso anónimo en su directorio virtual

escriba las siguientes credenciales a su servicio

ADTService.ServiceClient adtService = new ADTService.ServiceClient(); adtService.ClientCredentials.Windows.ClientCredential.UserName="windowsuseraccountname"; adtService.ClientCredentials.Windows.ClientCredential.Password="windowsuseraccountpassword"; adtService.ClientCredentials.Windows.ClientCredential.Domain="windowspcname";

después de eso, llama a los métodos de tu servicio web.


si es necesario para especificar el dominio (que autentica el nombre de usuario y la contraseña que usa el cliente) en webconfig, puede ponerlo en la sección del servicio de servicios system.serviceModel:

<identity> <servicePrincipalName value="example.com" /> </identity>

y en el cliente especifique dominio y nombre de usuario y contraseña:

client.ClientCredentials.Windows.ClientCredential.Domain = "example.com"; client.ClientCredentials.Windows.ClientCredential.UserName = "UserName "; client.ClientCredentials.Windows.ClientCredential.Password = "Password";