Saltar al contenido

La solicitud HTTP no está autorizada con el esquema de autenticación del cliente ‘Ntlm’

Recuerda que en la informática un error puede tener diversas soluciones, así que aquí te enseñaremos lo más óptimo y mejor.

Solución:

OK, aquí están las cosas que vienen a la mente:

  • Su servicio WCF que presumiblemente se ejecuta en IIS debe ejecutarse en el contexto de seguridad que tiene el privilegio que llama al servicio web. Debe asegurarse en el grupo de aplicaciones con un usuario que sea un usuario de dominio, idealmente un usuario dedicado.
  • No puede usar la suplantación para usar el token de seguridad del usuario para devolver a ASMX usando la suplantación ya que my WCF web service calls another ASMX web service, installed on a **different** web server
  • Intenta cambiar Ntlm para Windows y prueba de nuevo.

OK, algunas palabras sobre la suplantación de identidad. Básicamente, es un problema conocido que no puede usar los tokens de suplantación que obtuvo en un servidor para pasarlos a otro servidor. La razón parece ser que el token es una especie de hash que usa la contraseña del usuario y es válido para la máquina generada, por lo que no se puede usar desde el servidor intermedio.


ACTUALIZAR

Delegación es posible bajo WCF (es decir, reenviar la suplantación de un servidor a otro servidor). Mira este tema aquí.

Ha pasado mucho tiempo desde que se publicó la pregunta, pero experimenté el mismo problema en un escenario similar. Tengo una aplicación de consola y estaba consumiendo un servicio web y nuestro servidor IIS donde se colocó el servicio web tiene habilitada la autenticación de Windows (NTLM).

Seguí este enlace y eso solucionó mi problema. Aquí está el código de muestra para App.config:


    
        
            
                
                    
                    
                
            
        
    
    
        
    

Para mí, la solución fue además de usar “Ntlm” como tipo de credencial, similar a la solución de Jeroen K. Si tuviera el nivel de permiso, agregaría su publicación, pero déjame publicar mi código completo aquí, que admitirá tanto Windows como otros tipos de credenciales como la autenticación básica:

    XxxSoapClient xxxClient = new XxxSoapClient();
    ApplyCredentials(userName, password, xxxClient.ClientCredentials);

    private static void ApplyCredentials(string userName, string password, ClientCredentials clientCredentials)
    
        clientCredentials.UserName.UserName = userName;
        clientCredentials.UserName.Password = password;
        clientCredentials.Windows.ClientCredential.UserName = userName;
        clientCredentials.Windows.ClientCredential.Password = password;
        clientCredentials.Windows.AllowNtlm = true;
        clientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;
      

Comentarios y puntuaciones de la guía

Recuerda dar recomendación a esta crónica si te fue de ayuda.

¡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 *