Tengo un servicio ASMX básico que estoy tratando de ejecutar (prefiero usar WCF pero no puedo hacer que el servidor trabaje con él). Funciona bien en una configuración sin seguridad, pero tan pronto como enciendo la seguridad obtengo:Seguridad de nombre de usuario y contraseña de ASMX
La solicitud HTTP no está autorizada con el esquema de autenticación del cliente 'Anónimo'. El encabezado de autenticación recibido del servidor fue 'Basic realm = "Área protegida"'.
Lo que yo quiero es un minimalista pedir al usuario un nombre y una solución de tipo de contraseña.
Al pulsar el código con intellisense no aparece nada que se parezca a lo que necesito.
This Parece que podría ser útil, pero parece ser WCF, quién sabe.
me he dado cuenta de que puedo hacer de esto una demostración en vivo:
aquí es el servicio: http://smplsite.com/sandbox3/Service1.asmx
el nombre de usuario es testapp
y la contraseña es testpw
. Necesito una aplicación de línea de comandos que llame a funciones en ese servicio.
Befor añadí seguridad, esta línea trabajaron en un proyecto básico VS después de ejecutar Add Web Service Reference
en esa URL
new ServiceReference1.Service1SoapClient().HelloMom("Bob");
Este es mi intento actual (que no funciona)
class Program
{
private static bool customValidation(object s, X509Certificate c, X509Chain ch, SslPolicyErrors e)
{ return true }
static void Main(string[] args)
{
// accept anything
ServicePointManager.ServerCertificateValidationCallback +=
new RemoteCertificateValidationCallback(customValidation);
var binding = new BasicHttpBinding(BasicHttpSecurityMode.Transport);
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic;
binding.Security.Transport.Realm = "Secured area";
// the generated Web Service Reference class
var client = new ServiceReference1.Service1SoapClient(
binding,
new EndpointAddress("https://smplsite.com/sandbox3/Service1.asmx")
);
client.ClientCredentials.UserName.UserName = "testapp";
client.ClientCredentials.UserName.Password = "testpw";
Console.WriteLine(client.HelloMom("Bob"));
}
}
Edit: BTW esto no es un sitio web o se ejecuta en el navegador, el código de acceso es una aplicación de línea de comandos C#. Además, la autenticación está siendo realizada por otro complemento de IIS que no controlo.
Editar 2: Para ser claro; la solución que estoy buscando es un problema puramente del lado del cliente.
Editar 3: el control de acceso es a través de un .haccess
tipo de sistema y me gusta de esa manera. No deseo que el código de servicio realice ninguna autenticación.
Después de leer su edición, no estoy seguro de que mi solución sea útil, ya que el otro complemento de IIS realiza la autenticación. Lo dejaré allí en caso de que encienda una chispa ... – Moose
He editado mi respuesta. No sé si eso ayudará, pero es otro intento ... – Moose
¿puede acceder a su servicio web utilizando un navegador y ver lo que se le envía utilizando el violín? Luego puede intentar duplicar la autenticación que usa el navegador. De lo contrario, me he quedado sin ideas. – Moose