Saltar al contenido

¿Cómo hacer que HttpClient pase las credenciales junto con la solicitud?

Si hallas algún error en tu código o proyecto, recuerda probar siempre en un ambiente de testing antes aplicar el código al proyecto final.

Solución:

Puedes configurar HttpClient para pasar automáticamente credenciales como esta:

var myClient = new HttpClient(new HttpClientHandler()  UseDefaultCredentials = true );

Yo también estaba teniendo este mismo problema. Desarrollé una solución síncrona gracias a la investigación realizada por @tpeczek en el siguiente artículo de SO: No se puede autenticar en el servicio ASP.NET Web Api con HttpClient

Mi solución usa un WebClient, que, como notó correctamente, pasa las credenciales sin problemas. La razón HttpClient no funciona debido a que la seguridad de Windows deshabilita la capacidad de crear nuevos subprocesos en una cuenta suplantada (consulte el artículo SO anterior). HttpClient crea nuevos subprocesos a través de Task Factory, lo que provoca el error. WebClient por otro lado, se ejecuta sincrónicamente en el mismo subproceso, por lo que pasa por alto la regla y reenvía sus credenciales.

Aunque el código funciona, la desventaja es que no funcionará de forma asíncrona.

var wi = (System.Security.Principal.WindowsIdentity)HttpContext.Current.User.Identity;

var wic = wi.Impersonate();
try

    var data = JsonConvert.SerializeObject(new
    
        Property1 = 1,
        Property2 = "blah"
    );

    using (var client = new WebClient  UseDefaultCredentials = true )
    
        client.Headers.Add(HttpRequestHeader.ContentType, "application/json; charset=utf-8");
        client.UploadData("http://url/api/controller", "POST", Encoding.UTF8.GetBytes(data));
    

catch (Exception exc)

    // handle exception

finally

    wic.Undo();

Nota: Requiere el paquete NuGet: Newtonsoft.Json, que es el mismo serializador JSON que usa WebAPI.

Lo que está tratando de hacer es hacer que NTLM reenvíe la identidad al siguiente servidor, lo que no puede hacer; solo puede hacer la suplantación, lo que solo le da acceso a los recursos locales. No le permitirá cruzar el límite de una máquina. La autenticación Kerberos admite la delegación (lo que necesita) mediante el uso de tickets, y el ticket se puede reenviar cuando todos los servidores y aplicaciones de la cadena están configurados correctamente y Kerberos está configurado correctamente en el dominio. Entonces, en resumen, debe cambiar de usar NTLM a Kerberos.

Para obtener más información sobre las opciones de autenticación de Windows disponibles y cómo funcionan, visite: http://msdn.microsoft.com/en-us/library/ff647076.aspx

Aquí puedes ver las reseñas y valoraciones de los lectores

Eres capaz de añadir valor a nuestro contenido dando tu experiencia en las crónicas.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *