2017-09-27 90 views
1

我正在使用此代碼連接到第三方服務器。c#httpclient - 禁用ntlm

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錯誤錯誤:

type指定了異常報告消息NTLM。降級爲基本 驗證(和/或SSL),但不支持降級。說明服務器 遇到內部錯誤,導致其無法完成此 請求。 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?

+0

我認爲這個問題是服務器只支持NTLM。客戶端請求服務器上的資源,服務器回覆說NTLM授權是必需的,客戶回答說它不能執行NTLM,那麼Basic如何呢?服務器說,「對不起」並關閉了連接。所以我看到的答案是,你不能打擾NTLM,因爲服務器正在要求它。 – Duston

+0

這可能是..有沒有一種方法來追蹤這個沒有把小提琴手介於兩者之間(他們在生產環境中皺眉)? 我只想確保在我的最後,我可以確保我的客戶甚至不打算嘗試使用NTLM,但我沒有找到方法。像你一樣的東西可以啓用/禁用對SSL/TLS版本的支持。 – user3566056

+0

我覺得很奇怪,他們會抱怨在生產環境中使用Fiddler,因爲它在客戶端上運行。我用過很多的選項是Burp Suite,它在您的客戶端機器上充當代理。您可以捕獲並準確跟蹤客戶端和服務器之間發送的內容。你也可以推出你自己的,因爲它只是一個TCP事務,只需建立一個TCP連接並自己完成閱讀和寫作。或者爲了真正的冒險,使用Telnet。 – Duston

回答

0

要禁用NTLM試試這個:

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