Saltar al contenido

La solicitud HTTP no está autorizada con el esquema de autenticación del cliente ‘Negociar’. El encabezado de autenticación recibido del servidor fue ‘NTLM’

Nuestros investigadores estrellas han agotado sus reservas de café, en su búsqueda diariamente por la respuesta, hasta que Nicolás encontró el arreglo en Gitea así que en este momento la comparte contigo.

Solución:

LA RESPUESTA: El problema era que todas las publicaciones para tal problema estaban relacionadas con problemas anteriores de kerberos e IIS donde las credenciales de proxy o las propiedades AllowNTLM estaban ayudando. Mi caso fue diferente. Lo que descubrí después de horas de recoger gusanos del suelo fue que, de alguna manera, la instalación de IIS no incluía Negociar proveedor en la lista de proveedores de autenticación de Windows de IIS. Así que tuve que agregarlo y subir. Mi servicio WCF comenzó a autenticarse como se esperaba. Aquí está la captura de pantalla de cómo debería verse si estás usando la autenticación de Windows con la autenticación anónima desactivada.

Debe hacer clic derecho en la autenticación de Windows y elegir el elemento del menú de proveedores.

ingrese la descripción de la imagen aquí

Espero que esto ayude a ahorrar algo de tiempo.

Actualicé mi versión anterior de WCF a WCF 4 con los siguientes cambios, espero que también pueda realizar cambios similares.

1. Web.config:


      
        
          
            
              
            
          
        
      
      
        
          
            
              
            
          
          
        
      
      
        
          
            
            
            
            
          
        
      
      
        
      
      
    

2. Configuración de la aplicación:

    
    
      
        
          
          
            
          
        
      
    
    
      
    
  

Para mí, la solución fue además de usar “Ntlm” como tipo de credencial:

    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;
      

Sección de Reseñas y Valoraciones

Si estás contento con lo expuesto, tienes la opción de dejar una sección acerca de qué le añadirías a este artículo.

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