c#httpclient - 禁用ntlm

时间:2017-09-27 12:51:22

标签: c# dotnet-httpclient ntlm-authentication

我使用此代码连接到第三方服务器。

using (HttpClientHandler httpClientHandler = new HttpClientHandler())
{
    httpClientHandler.AllowAutoRedirect = false;
    httpClientHandler.Credentials = new NetworkCredential(login, password);
    using (HttpClient authClient = new HttpClient(httpClientHandler))
    {
        response = await authClient.GetAsync(authenticationUrl).ConfigureAwait(false);
        ... response processing here
    }
}

第三方服务器是一个设备,他们最近打开了NTLM。从打开NTLM开始,我的请求现在出现HTTP 500错误错误,如下所示:

  

指定类型的异常报告消息NTLM。降级为基本   Auth(和/或SSL)但不支持降级。 description服务器   遇到内部错误,导致无法完成此操作   请求。异常java.lang.UnsupportedOperationException:NTLM   指定。降级为基本身份验证(和/或SSL),但不降级   支持的。     net.sourceforge.spnego.SpnegoProvider.negotiate(SpnegoProvider.java:146)     net.sourceforge.spnego.SpnegoAuthenticator.authenticate(SpnegoAuthenticator.java:271)     net.sourceforge.spnego.SpnegoHttpFilter.doFilter(SpnegoHttpFilter.java:229)

我假设我的httpclient看到服务器现在支持NTLM并尝试执行NTLM。有没有办法告诉我的httpclient甚至不打扰NTLM?

1 个答案:

答案 0 :(得分:0)

要禁用NTLM,请尝试以下操作:

        var modules = AuthenticationManager.RegisteredModules;
        while (modules.MoveNext())
        {
            var module = (IAuthenticationModule) modules.Current;
            if (module.AuthenticationType == "NTLM")
            {
                AuthenticationManager.Unregister(module);
                break; 
            }
        }