Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

NTLM Authentication and WebDriver

coded-ui
csharp
nunit
webdriver
Теги: #<Tag:0x00007f7b6413c248> #<Tag:0x00007f7b6413c0b8> #<Tag:0x00007f7b64143ef8> #<Tag:0x00007f7b64143d40>

(German Komashko) #1

Всем привет.

Второй день подряд пытаюсь найти элегантное решение, старого ишью с 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.

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


(Stan) #2

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

   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/

(German Komashko) #3

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


(rmerkushin) #4

Попробуйте cntlm. Решает многие проблемы с авторизацией для разных тулов :smile:
Для windows: http://habrahabr.ru/post/138699/ А под linux ставится через любой пакедж менеджер


(German Komashko) #5

Как это не странно, но 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);

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


(Stan) #6

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


(Дмитрий Жарий) #7

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

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


(Sergey Brit) #8

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


(Sergey Petrovich) #9

Наш метод. Дефолтовые настройки профиля, ничего интересного 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); потому что логин не всегда навигейтит
        }

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


(The Serjiom ) #10

Ось може також допоможе https://addons.mozilla.org/en-us/firefox/addon/autoauth/