【问题标题】:Credentials cannot be used for NTLM authentication凭据不能用于 NTLM 身份验证
【发布时间】:2017-12-08 10:32:54
【问题描述】:

我得到了

org.apache.commons.httpclient.auth.InvalidCredentialsException: 凭据不能用于 NTLM 身份验证:

eclipse 中的异常

是否可以提eclipse直接取系统代理设置?

public class HttpGetProxy {
    private static final String PROXY_HOST = "proxy.****.com";
    private static final int PROXY_PORT = 6050;

    public static void main(String[] args) {
        HttpClient client = new HttpClient();
        HttpMethod method = new GetMethod("https://kodejava.org");

        HostConfiguration config = client.getHostConfiguration();
        config.setProxy(PROXY_HOST, PROXY_PORT);

        String username = "*****";
        String password = "*****";
        Credentials credentials = new UsernamePasswordCredentials(username, password);
        AuthScope authScope = new AuthScope(PROXY_HOST, PROXY_PORT);

        client.getState().setProxyCredentials(authScope, credentials);

        try {
            client.executeMethod(method);

            if (method.getStatusCode() == HttpStatus.SC_OK) {
                String response = method.getResponseBodyAsString();
                System.out.println("Response = " + response);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            method.releaseConnection();
        }
    }
}

例外:

2017 年 12 月 8 日下午 1:41:39 org.apache.commons.httpclient.auth.AuthChallengeProcessor selectAuthScheme 信息:已选择 ntlm 身份验证方案 2017 年 12 月 8 日下午 1:41:39 org.apache.commons.httpclient.HttpMethodDirector executeConnect 严重:凭据不能用于 NTLM 身份验证: org.apache.commons.httpclient.UsernamePasswordCredentials org.apache.commons.httpclient.auth.InvalidCredentialsException:凭据 不能用于 NTLM 身份验证: enter code here org.apache.commons.httpclient.UsernamePasswordCredentials 在 org.apache.commons.httpclient.auth.NTLMScheme.authenticate(NTLMScheme.java:332) 在 org.apache.commons.httpclient.HttpMethodDirector.authenticateProxy(HttpMethodDirector.java:320) 在 org.apache.commons.httpclient.HttpMethodDirector.executeConnect(HttpMethodDirector.java:491) 在 org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:391) 在 org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171) 在 org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397) 在 org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:323) 在 HttpGetProxy.main(HttpGetProxy.java:31)
2017 年 12 月 8 日下午 1:41:39 org.apache.commons.httpclient.HttpMethodDirector processProxyAuthChallenge 信息:使用 NTLM @proxy.****.com:6050 进行身份验证失败

【问题讨论】:

    标签: java


    【解决方案1】:

    我认为您需要在“用户名”字段中使用域\用户名形式的凭据,NTLM 身份验证才能正常工作。

    【讨论】:

    • 仍然无法正常工作。我已添加域并检查它不工作
    • @bharathi 如果 BasicAuthentication 可以用作 NTLM 的后备,Windows Server 中甚至还有一些配置(我不确定它是否默认启用)。如果启用此选项,如果将大大简化您的生活。否则你将不得不自己写AuthScheme
    • @bharathi 你能解决这个问题吗?如果可以,解决办法是什么?
    【解决方案2】:

    根据documentation,支持以下身份验证方案:Basic、Digest、NTLM、SPNEGO、Kerberos

    特别是:

    NTLM:NTLM 是由 Microsoft 并针对 Windows 平台进行了优化。 NTLM 被认为是 比 Digest 更安全。

    因此,为了避免此警告,请使用以下 CredentialProvider:

    CredentialsProvider provider = new BasicCredentialsProvider();
    provider.setCredentials(AuthScope.ANY, new NTCredentials("user", "pwd", "", "domain"));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-07
      • 1970-01-01
      • 1970-01-01
      • 2013-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多