2016-11-22 5 views
1

Ich habe mit Problem NTLM-Autorisierung Ich habe Service, die auf asp.net ohne Probleme funktionieren, aber jetzt muss ich mit diesem Service auf asp.net Core arbeiten, und Ich kann keine Autorisierung weitergeben.NTLM-Autorisierung WCF in ASP.NET Core funktioniert nicht

ich so konfigurieren Bindung:

 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; 

hinzugefügt Dann

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

Dann mache ich eine Anfrage zu bedienen und

---> System.ServiceModel.Security zu erhalten .MessageSecurityException: Die HTTP-Anfrage ist mit dem Client-Authentifizierungsschema 'Ntlm' nicht autorisiert. Der Authentifizierungsheader , der vom Server empfangen wurde, war "NTLM".

Ich öffnete Fiedler und verglichen zwei Anträge (asp.net und Kern) Und ich fand Unterschied in Authorization-Header, aber Passwort und Login das gleiches in der Konfigurationsdatei.

ASP.NET:

Authorization: NTLM TlRMTVNTUAABAAAAB4I Y ogAAAAAAAAAAAAAAAAAAAAAKADk4AAAADw ==

Kern:

Authorization: NTLM TlRMTVNTUAABAAAAB4I I ogAAAAAAAAAAAAAAAAAAAAAKADk4AAAADw ==

ich versucht zu schreiben, benutzerdefiniertes Verhalten, um Header von asp.net anstelle von Core-Variante in BeforeSendRequest(), aber in der zweiten Anfrage Client erneut senden Core-Variante der Kopfzeile und ich wieder die gleiche Nachricht über NTLM

Kann ich versuchen, Fehler an einem falschen Ort zu finden?

+0

Dies könnte völlig falsch sein, aber es scheint, es ist eine Groß-und Kleinschreibung Problem. Die HTTP-Anfrage ist nicht autorisiert mit Client-Authentifizierungsschema !! 'Ntlm' !! Der vom Server empfangene Authentifizierungs-Header war !! "NTLM" !! –

+0

Ich dachte darüber nach, aber ich bekomme die gleiche Nachricht zum Beispiel in asp.net, wenn ich falsches Passwort einstelle – DreamEvil

Antwort

1

Ich fand Grund für dieses Verhalten. In asp.net setze ich nicht Domain, nur Login und Passwort und es funktioniert. Aber in asp.core funktioniert es nicht für mich, ich habe Domain hinzugefügt. Und jetzt funktioniert es auch in asp.core.

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