Как выбрать между NTCredentials и UsernamePasswordCredentials в универсальном приложении?

Я разрабатываю приложение, которое поддерживает как базовый, так и прокси-сервер аутентификации NTLM, используя apache HttpClient версии 4.5.2. В настоящее время пользовательский интерфейс не спрашивает пользователя о типе аутентификации в прокси-сервере и предполагается, что это 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, который является частью рабочей группы, не спрашивая пользователя о типе аутентификации?


person DevadasTV    schedule 25.06.2018    source источник


Ответы (1)


Можно просто использовать NTCredentials с нулевым доменом в качестве единственного типа учетных данных, независимо от того, являются ли противоположные конечные точки частью домена NT или нет.

person ok2c    schedule 26.06.2018
comment
Спасибо за ваш ответ. Таким образом, вы имеете в виду, что мы можем использовать NTCredentials с нулевым/действительным доменом (тем самым полностью избегая использования UsernamePasswordCredentials) в условиях, когда прокси-сервер использует (1) ntlm-аутентификацию или (2) базовую аутентификацию с прокси-сервером, может быть или не быть частью домен? - person DevadasTV; 27.06.2018
comment
Используйте нулевое значение домена, если домен неизвестен. В противном случае просто используйте NTCredentials вместо UsernamePasswordCredentials и живите долго и счастливо - person ok2c; 28.06.2018