2016-11-22 40 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; 
    };