NTLM Authentication and WebDriver

Всем привет.

Второй день подряд пытаюсь найти элегантное решение, старого ишью с NTLM аутентификацией.

Такой вариант http://login:pass@website.com у меня разумеется не работает, иначе бы не задался вопросом) Проект на С#, драйвер Firefox.

Все возможные игры с профайлом, я тоже перепробовал:

ffprofile.SetPreference("network.automatic-ntlm-auth.trusted-uris", "company.com");
ffprofile.SetPreference("network.http.phishy-userpass-length", 255);

Остается, только “вбивать” логин и пароль. Но тут встает вопрос как именно.

AutoIt, работает. Но к сожалению вызывая его из NUnit я получаю COM creation exception - Как решить эту проблему, я пока не понял.

Остается, разве что Coded UI Test.

Одним словом, помогите кто чем может) Буду признателен за примеры.

Попробовал в своем фреймворке - получилось. С твоими настройками не работает, да. Что сделал:

   network.ntlm. send-lm-response = true
   network.negotiate-auth.using-native-gsslib = true
   network.negotiate-auth.trusted-uris = https://, http://
   network.negotiate-auth.delegation-uris = https://, http://

т.к. нтлм в моем случае был v1, а мозилла его депрекейтнула в 30ой версии https://developer.mozilla.org/en-US/Firefox/Releases/30/Site_Compatibility#Security , то пришлось еще:

   network.negotiate-auth.allow-insecure-ntlm-v1 = true

в итоге:

   https://DOMAIN%5cusername:password@test.com/
1 лайк

Большое спасибо! Попробую у себя и отпишусь о результате.

Попробуйте cntlm. Решает многие проблемы с авторизацией для разных тулов :smile:
Для windows: Авторизующий прокси под Windows (+ нормальная работа Opera с NTLM как бонус) / Habr А под linux ставится через любой пакедж менеджер

2 лайка

Как это не странно, но Firefox-ий pop-up “Authentication Required” все еще меня приследует.

Вот как сейчас выглядит код:

var ffProfile = new FirefoxProfile();
ffProfile.SetPreference("network.ntlm.send-lm-response", true);
ffProfile.SetPreference("network.negotiate-auth.using-native-gsslib", true);
ffProfile.SetPreference("network.negotiate-auth.trusted-uris", "http://, https://");
ffProfile.SetPreference("network.negotiate-auth.delegation-uris", "http://, https://");
ffProfile.SetPreference("network.negotiate-auth.allow-insecure-ntlm-v1", true);

Driver = new FirefoxDriver(ffProfile);

Driver.Navigate().GoToUrl(url);

Что еще, сюда можно добавить, я уже не могу придумать)

Проблема может быть где угодно. Понять ее в большинстве случаев можно отбрасыванием тех, которых точно нет. Если открыть фф в твоем случае с вновь созданным профилем по ссылке вида name:pass@site.com, авторизует ли он тебя? авторизует ли он в старом профиле? Давай больше информации.

Поапрбуйте поигратся с вот этими настройками (мне в свое время помогло решить похожую проблему для Chrome):

Также, можно попробовать добавить пароль авторизации в Windows Credentials store

2 лайка

Доброго времени суток.
Попробуйте Browser-mob proxy

Наш метод. Дефолтовые настройки профиля, ничего интересного FirefoxProfile profile = new FirefoxProfile();
Ну и сам метод

 public void Start(Uri url, string user, string password)
        {
            var encodedUser = HttpUtility.UrlEncode(user);
            var encodedPwd = HttpUtility.UrlEncode(password);
            var baseUrl = url.Authority + url.PathAndQuery;
            var protocol = url.Scheme + "://";

            string ntlmUrl =
                protocol
                + encodedUser
                + ":"
                + encodedPwd
                + "@"
                + baseUrl;

            Driver.Url = ntlmUrl;
           //// Если надо то можно сразу и делать Navigate(url); потому что логин не всегда навигейтит
        }

Идея сотрудника. Авторство его.

Ось може також допоможе AutoAuth – Get this Extension for 🦊 Firefox (en-US)