如何在通用应用程序中选择 NTCredentials 和 UsernamePasswordCredentials?

How to choose between NTCredentials and UsernamePasswordCredentials in a generic application?

我正在开发一个应用程序,它使用 apache HttpClient 版本 4.5.2 支持基本和 NTLM 身份验证代理。用户界面目前不询问用户代理中的身份验证类型,如果用户输入如下所示的域,则假定为 NTLM:

    Credentials credentials = null;
    if (domain != null && domain.length() > 0) {
        credentials = new NTCredentials(username, password, client, domain);
    else {
        credentials = new UsernamePasswordCredentials(username, password);
    }

这种方法在大多数情况下都有效。但是,在 NTLM 代理服务器是工作组的一部分(而不是域的一部分)的部署中,域为空,并且根据上述逻辑,使用的凭据是 UsernamePasswordCredentials。由于proxy支持NTLM,需要有凭证才能成为NTCredentials的实例,所以请求失败。

有没有什么方法可以在作为工作组的一部分的 NTLM 代理中使这段代码像这样通用,而不询问用户身份验证的类型?

无论相对端点是否属于 NT 域,都可以只使用 NTCredentials 和空域作为唯一类型的凭据。