2016-11-22 2 views
1

NTLM 인증과 함께 문제가 발생했습니다. asp.net에서 아무 문제없이 작동하는 서비스가 있습니다. 그러나 이제는 asp.net 코어에서이 서비스를 사용해야합니다. 나는 허가를 통과 할 수 없다.ASP.NET 코어의 NTLM 인증 WCF가 작동하지 않습니다.

나는이 같은 바인딩을 구성합니다

 var binding = new BasicHttpBinding(BasicHttpSecurityMode.TransportCredentialOnly); 
     binding.OpenTimeout = binding.CloseTimeout = 
     binding.SendTimeout = binding.ReceiveTimeout = TimeSpan.FromMinutes(1); 
     binding.MaxReceivedMessageSize = 20971520; 
     binding.MaxBufferPoolSize = binding.MaxBufferSize = 20971520; 
     binding.ReaderQuotas.MaxArrayLength = 
     binding.ReaderQuotas.MaxStringContentLength = 
     binding.ReaderQuotas.MaxBytesPerRead = 
     binding.ReaderQuotas.MaxNameTableCharCount = 2097152; 

     binding.TextEncoding = Encoding.UTF8; 
     binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Ntlm; 
     //binding.Security.Mode = BasicHttpSecurityMode.TransportWithMessageCredential; 
     binding.TransferMode = TransferMode.Buffered; 
     binding.AllowCookies = false; 

는 그럼 난 서비스와

---> System.ServiceModel.Security를 ​​얻을 수있는 몇 가지 요청을 할 다음

 ClientCredentials.Windows.ClientCredential.UserName = service.Login; 
     ClientCredentials.Windows.ClientCredential.Password = service.Password; 

추가 .MessageSecurityException : HTTP 요청이 클라이언트 인증 체계 'Ntlm'과 함께 인증되지 않았습니다. 서버에서받은 인증 헤더는 'NTLM'입니다.

내가 피들러와 비교하여 두 요청 (asp.net 및 코어) 을 열어 그리고 인증 헤더에서 차이를 발견하지만, 암호 설정 파일에 동일한 로그인합니다.

ASP.NET :

권한 : NTLM TlRMTVNTUAABAAAAB4I Y ogAAAAAAAAAAAAAAAAAAAAAKADk4AAAADw의 ==

코어 :

권한 : NTLM TlRMTVNTUAABAAAAB4I I ogAAAAAAAAAAAAAAAAAAAAAKADk4AAAADw의 ==

내가 작성하려고 에서 코어 변형 대신 asp.net의 헤더를 넣기위한 사용자 정의 동작 BeforeSendRequest()하지만 두 번째 요청에서 클라이언트는 다시 헤더의 핵심 변형을 보내고 NTLM에 대한 동일한 메시지를 다시받습니다.

잘못된 위치에서 실수를 찾으려고 시도 할 수 있습니까?

+0

이것은 완전히 잘못되었을 수 있지만 대소 문자를 구분하는 것처럼 보입니다. HTTP 요청은 클라이언트 인증 스키마와 함께 권한이 없습니다! 'Ntlm'!! 서버로부터받은 인증 헤더는 !! 'NTLM'!! –

+0

나는 그것에 대해 생각했지만 잘못된 암호를 설정하면 asp.net에서 예를 들어 같은 메시지가 나타납니다. – DreamEvil

답변

1

이 문제의 원인을 발견했습니다. asp.net에서 도메인, 로그인 및 암호 만 설정하고 작동하지 않습니다. 그러나 asp.core에서 그것은 나를 위해 작동하지 않습니다, 나는 도메인을 추가했습니다. 그리고 지금은 asp.core에서도 작동합니다.

var credentials = new NetworkCredential() 
    { 
     UserName = service.Login, 
     Password = service.Password, 
     Domain = service.Domain; 
    };