【问题标题】:Auth errors using Apache HTTPClient使用 Apache HTTPClient 的身份验证错误
【发布时间】:2017-04-04 18:18:52
【问题描述】:

我正在尝试通过经过身份验证的代理发出请求,如下所示

HttpHost proxy = new HttpHost("http-proxy", 80);
    CredentialsProvider credsProvider = new BasicCredentialsProvider();
    credsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(
            user, password));

    try (CloseableHttpClient client = HttpClientBuilder.create().setDefaultCredentialsProvider(credsProvider)
            .build()) {
        HttpPost post = new HttpPost(url);

        RequestConfig config = RequestConfig.custom().setProxy(proxy).build();
        post.setConfig(config);

        post.setEntity(new UrlEncodedFormEntity(urlParameters));

        HttpResponse response = client.execute(post);

        return response;
    }

我的问题是它给了我以下错误,我不太明白。我怀疑我可能没有使用正确的类来进行身份验证。

    WARNING: NEGOTIATE authentication error: No valid credentials provided (Mechanism level: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt))

WARNING: KERBEROS authentication error: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)

WARNING: NTLM authentication error: Credentials cannot be used for NTLM authentication: org.apache.http.auth.UsernamePasswordCredentials

【问题讨论】:

  • 我一般对 HTTP 身份验证了解不多,但这些消息意味着您的客户端不知道代理期望哪种身份验证,因此它尝试 SPNego (除其他外? ?),首先使用 Kerberos,然后使用 NTLM。两者都失败了。
  • 顺便说一句,您为什么尝试像处理某种常规 HTTP 站点一样处理代理? Java 有一个特定的代理工具包,即ProxySocketFactory 等。我记得将这些东西用于 FTP 和 SFTP 连接(使用 Apache commons.net 和 SSHJ - 都支持自定义 SocketFactory)。
  • apache 示例让我以这种方式处理代理。您是否建议我尝试使用开箱即用的 java.net api 重写它?
  • [耸肩] 随心所欲。但我担心 Apache 示例与 Apache 玩具代理和 Apache 玩具网站配合得很好;现实世界要复杂一些。顺便说一句,您是否简单地尝试了 curl 与适当的代理参数和调试跟踪,看看它使用了什么样的 auth / headers?
  • 我不确定我是否熟悉 curl

标签: java authentication apache-httpcomponents


【解决方案1】:

MS 代理服务器配置似乎有问题。您可以disable NTLM in HTTP client 并尝试基本身份验证,或者如果 NTLM/Kerberos 是强制性的,请尝试HTTP wire logs 以进一步解决问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多