2016-11-22 39 views
1

我遇到了問題NTLM授權 我有沒有任何問題在asp.net上工作的服務,但現在我需要在asp.net核心上使用此服務,並且我無法通過授權。NTLM授權WCF在ASP.NET核心不起作用

我配置的結合是這樣的:

 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; 

然後加入

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

然後我做的服務,並得到

---> System.ServiceModel.Security有一定的要求.MessageSecurityException:HTTP請求未經客戶端身份驗證方案'Ntlm'的授權。從服務器接收到的 身份驗證標頭爲'NTLM'。

我打開提琴手和比較兩個請求(asp.net和核心) 而且我發現在Authorization頭的區別,但密碼和登錄在配置文件中的相同。

ASP.NET:

授權:NTLM TlRMTVNTUAABAAAAB4I Ÿ ogAAAAAAAAAAAAAAAAAAAAAKADk4AAAADw ==

核心:

授權:NTLM TlRMTVNTUAABAAAAB4I 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; 
    };