ASP.NET Core中的NTLM授权WCF不起作用

时间:2016-11-22 11:51:58

标签: c# asp.net .net wcf asp.net-core

我遇到问题NTLM授权 我有服务在asp.net上工作没有任何问题,但现在我需要在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 Y ogAAAAAAAAAAAAAAAAAAAAAKADk4AAAADw ==

核心:

授权:NTLM TlRMTVNTUAABAAAAB4I ogAAAAAAAAAAAAAAAAAAAAAKADk4AAAADw ==

我尝试编写自定义行为,以便在BeforeSendRequest()中放置来自asp.net而不是核心变体的标头,但是在第二个请求客户端再次发送标头的核心变体,我再次得到关于NTLM的相同消息

可能是我试图在错误的地方发现错误?

1 个答案:

答案 0 :(得分:1)

我发现了这种行为的原因。 在asp.net我没有设置域,只有登录名和密码,它的工作原理。 但是在asp dotnet核心中它对我不起作用,我添加了Domain。现在它也适用于asp dotnet核心。

    var credentials = new NetworkCredential
    {
        UserName = service.Login,
        Password = service.Password,
        Domain = service.Domain
    };
    service.ClientCredentials.Windows.ClientCredential = credentials;