首页 文章

HttpClient与NTLM auth提供程序发出Negotiate错误

提问于
浏览
3

我通过使用“强制”httpclient进行ntlm身份验证:

PoolingHttpClientConnectionManager connPool  connPool = new PoolingHttpClientConnectionManager();

    Lookup<AuthSchemeProvider> authProviders = RegistryBuilder.<AuthSchemeProvider>create()
            .register(AuthSchemes.NTLM, new NTLMSchemeFactory())                
            .build();

    CloseableHttpClient httpClient = HttpClients.custom().setConnectionManager(connPool).setDefaultAuthSchemeRegistry(authProviders).build();

但是,在对服务器进行身份验证时,我收到一条恼人的日志消息“身份验证方案协商不受支持” .

我怎样才能摆脱这条消息?

(这将在Linux机器上运行,因此HttpClient 4.4 JNA支持本机身份验证将无济于事 . )

1 回答

  • 4

    我认为这一切都很简单 . 实际上,客户端只愿意做 NTLM 而服务器只愿意做 Negotiate ,因此无法就通用认证方案达成一致 .

    这是如何调整身份验证方案首选项以强制HttpClient通过SPNEGO / Kerberos选择NTLM

    RequestConfig config = RequestConfig.custom()
            .setTargetPreferredAuthSchemes(Arrays.asList(AuthSchemes.NTLM, AuthSchemes.KERBEROS, AuthSchemes.SPNEGO))
            .build();
    CloseableHttpClient client = HttpClients.custom()
            .setDefaultRequestConfig(config)
            .build();
    

相关问题