【问题标题】:How to choose between NTCredentials and UsernamePasswordCredentials in a generic application?如何在通用应用程序中选择 NTCredentials 和 UsernamePasswordCredentials?
【发布时间】:2018-06-25 18:28:58
【问题描述】:

我正在使用 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。由于代理支持 NTLM 并且需要有凭据才能成为 NTCredentials 的实例,因此请求失败。

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

【问题讨论】:

    标签: java apache-httpclient-4.x ntlm


    【解决方案1】:

    人们可以只使用带有空域的NTCredentials 作为唯一的凭据类型,而不管相对的端点是否是 NT 域的一部分。

    【讨论】:

    • 感谢您的回复。所以你的意思是我们可以在代理使用 (1) ntlm auth 或 (2) basic auth 的情况下使用带有空/有效域的NTCredentials(从而完全避免使用UsernamePasswordCredentials)可能会或可能不会成为域的一部分?
    • 如果域未知,则使用空域值。否则,只需使用 NTCredentials 而不是 UsernamePasswordCredentials 并从此过上幸福的生活
    猜你喜欢
    • 1970-01-01
    • 2016-11-15
    • 1970-01-01
    • 2015-06-06
    • 1970-01-01
    • 2022-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多