HttpClient 给出与 NTLM 身份验证提供程序的协商错误
HttpClient gives Negotiate error with NTLM auth provider
我是 "forcing" 的 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();
但是,在对服务器进行身份验证时,我收到一条烦人的日志消息 "Authentication scheme Negotiate not supported"。
我怎样才能摆脱这条消息?
(这将是 运行 在 linux 框上,因此 HttpClient 4.4 JNA 对本机身份验证的支持无济于事。)
我觉得一切都很简单。实际上,客户端只愿意做 NTLM
而服务器只愿意做 Negotiate
,因此无法就通用身份验证方案达成一致。
这是调整身份验证方案首选项以强制 HttpClient 选择 NTLM 而不是 SPNEGO / Kerberos 的方法
RequestConfig config = RequestConfig.custom()
.setTargetPreferredAuthSchemes(Arrays.asList(AuthSchemes.NTLM, AuthSchemes.KERBEROS, AuthSchemes.SPNEGO))
.build();
CloseableHttpClient client = HttpClients.custom()
.setDefaultRequestConfig(config)
.build();
我是 "forcing" 的 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();
但是,在对服务器进行身份验证时,我收到一条烦人的日志消息 "Authentication scheme Negotiate not supported"。
我怎样才能摆脱这条消息?
(这将是 运行 在 linux 框上,因此 HttpClient 4.4 JNA 对本机身份验证的支持无济于事。)
我觉得一切都很简单。实际上,客户端只愿意做 NTLM
而服务器只愿意做 Negotiate
,因此无法就通用身份验证方案达成一致。
这是调整身份验证方案首选项以强制 HttpClient 选择 NTLM 而不是 SPNEGO / Kerberos 的方法
RequestConfig config = RequestConfig.custom()
.setTargetPreferredAuthSchemes(Arrays.asList(AuthSchemes.NTLM, AuthSchemes.KERBEROS, AuthSchemes.SPNEGO))
.build();
CloseableHttpClient client = HttpClients.custom()
.setDefaultRequestConfig(config)
.build();