NTLM version 2, автоматическая авторизация |
Здравствуйте, гость ( Вход | Регистрация )
NTLM version 2, автоматическая авторизация |
dale87 |
21.1.2011, 8:22
Сообщение
#1
|
Новичок Группа: Новичок Сообщений: 3 Регистрация: 21.1.2011 Пользователь №: 2355 Спасибо сказали: 0 раз(а) Репутация: 0 |
Доброе время суток!
Задача: Написать приложение на QT, которое будет автоматически авторизоваться на корпоративном сайте с именем пользователя и паролем текущей учетной записи, собирать и обрабатывать необходимую информацию. Авторизация проходит по протоколу NTLM version 2. А теперь собственно вопрос: Все замечательно получается кроме одного! Автоматическая авторизация не происходит. Выпадает диалог в котором требуется ввести имя пользователя и пароль... В чем здесь дело? Может нужно использовать какие-то другие классы, или что-то дополнительно настраивать? Возможно ли вообще осуществить автоматическую авторизацию с использованием библиотеки QT? При подключении к серверу пользуюсь классами: QNetworkAccessManager, QAuthenticator. Версия библиотеки 4.7.1. Адекватной документации по этому вопросу я не нашел. К слову: сервер настроен. Т.е. когда заходим на сайт через браузер аутентификация проходит автоматически. |
|
|
Rocky |
21.1.2011, 9:39
Сообщение
#2
|
Старейший участник Группа: Участник Сообщений: 530 Регистрация: 22.12.2008 Из: Санкт-Петербург Пользователь №: 463 Спасибо сказали: 22 раз(а) Репутация: 7 |
слот QNetworkAccessManager::authenticationRequired задействован? Туда попадаете? Что внутри? QAuthenticator::setUser и QAuthenticator::setPassword вызываете внутри слота?
|
|
|
dale87 |
21.1.2011, 10:16
Сообщение
#3
|
Новичок Группа: Новичок Сообщений: 3 Регистрация: 21.1.2011 Пользователь №: 2355 Спасибо сказали: 0 раз(а) Репутация: 0 |
слот QNetworkAccessManager::authenticationRequired задействован? Туда попадаете? Что внутри? QAuthenticator::setUser и QAuthenticator::setPassword вызываете внутри слота? как основу я использовал пример из QT HTML Client На данный момент авторизация проходит следующим образом:
Соответственно вылетает диалог, где вводится имя и пароль... Можно было бы воспользоваться функциями setUser() и setPassword(), но где взять эти самые имя и пароль? Ну а коннект происходит следующим образом:
|
|
|
Rocky |
21.1.2011, 11:52
Сообщение
#4
|
Старейший участник Группа: Участник Сообщений: 530 Регистрация: 22.12.2008 Из: Санкт-Петербург Пользователь №: 463 Спасибо сказали: 22 раз(а) Репутация: 7 |
Так а с чего вы решили что в таком случае будет автоматическая авторизация? Эти действия насколько я понимаю происходят при каждом handshake. Т.е. нужно делать свой PasswordManager, который бы хранил пары "логин/пароль - сайт(url)". И далее в этом слоте slotAuthenticationRequired искать по url логин/пароль. Если нашелся - задавать их, если нет - показывать диалог ввода. Сохранять логин/пароль - это уж как угодно. Можно БД завести отдельную для этого. Пароль вероятно лучче шифровать. Причем каким-нить симметричным методом. Например, в openSSL это позволяет делать (имею ввиду его функции).
|
|
|
dale87 |
21.1.2011, 12:16
Сообщение
#5
|
Новичок Группа: Новичок Сообщений: 3 Регистрация: 21.1.2011 Пользователь №: 2355 Спасибо сказали: 0 раз(а) Репутация: 0 |
Так а с чего вы решили что в таком случае будет автоматическая авторизация? Эти действия насколько я понимаю происходят при каждом handshake. Т.е. нужно делать свой PasswordManager, который бы хранил пары "логин/пароль - сайт(url)". И далее в этом слоте slotAuthenticationRequired искать по url логин/пароль. Если нашелся - задавать их, если нет - показывать диалог ввода. Сохранять логин/пароль - это уж как угодно. Можно БД завести отдельную для этого. Пароль вероятно лучче шифровать. Причем каким-нить симметричным методом. Например, в openSSL это позволяет делать (имею ввиду его функции). Это конечно можно реализовать, но речь совсем о другом. Windows где-то хранит хэш паролей и должны быть стандартные средства авторизации (на PROXY, mail... серверах с использованием доменного имени пользователя и пароля). Если я захожу на сайт в IE, то он АВТОМАТОМ авторизуется, в FireFox также можно настроить автоматическую NTLM аутентификацию. А вопрос в том и состоит, как можно сделать аналогичную вещь в своей программе, а не городить что-то свое. Если я правильно понимаю, то поддержка NTLM version 2 автоматически означает, что заходя на какой-либо сервер приложение в первую очередь будет пробовать авторизоваться используя именно пароль и имя текущего пользователя windows. IE делает так со всеми серверами требующими авторизации, в Firefox можно руками прописать на каких серверах он будет пробовать NTLM аутентификацию в параметре network.automatic-ntlm-auth.trusted-uris. |
|
|
Litkevich Yuriy |
21.1.2011, 18:55
Сообщение
#6
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
dale87, пиши нормальным шрифтом.
|
|
|
Padawan |
8.4.2011, 14:47
Сообщение
#7
|
Новичок Группа: Новичок Сообщений: 5 Регистрация: 28.11.2008 Пользователь №: 439 Спасибо сказали: 0 раз(а) Репутация: 0 |
Вот что нарыл в документации.
У меня та же самая проблема. Нашли какое ни будь решение ? Цитата QAuthenticator Class Reference
QAuthenticator supports the following authentication methods:
Note that, in particular, NTLM version 2 is not supported. |
|
|
PAFOS |
8.4.2011, 16:47
Сообщение
#8
|
Активный участник Группа: Участник Сообщений: 258 Регистрация: 27.12.2010 Из: Дмитров Пользователь №: 2309 Спасибо сказали: 29 раз(а) Репутация: 8 |
Решение в данном случае надо написать
|
|
|
Текстовая версия | Сейчас: 15.1.2025, 14:32 |