Добрый день форумчане. Зарегился специально на этом форуме, так как именно тут нашел несколько советов по решению своих проблем. На других форумах что то тишина по моим вопросам, либо я туповатые вопросы задаю либо нет ответа. Итак предыстория, всегда писал под Windows на Qt. Тут пришлось писать под Linux.
Рабочая станция Ubuntu18.04 среда разработки Qt5.12.1 домен Windows Server 2012 AD. Приложение GUI для работы с БД postgresql. Необходима авторизация пользователя в AD из приложения и запуск приложения при верной авторизации. Для авторизации использовал пакет OpenLDAP.Как устанавливал написал тут https://forum.qt.io/topic/100294/qt-linux-авторизация-в-ad/8 Авторизация заработала, правда она как бы двухступенчатая. Авторизация возможна только по DN (distinguish name), поэтому вначале биндимся к AD под какойни буть учеткой, потом ищем там пользователя по введенному логину, берем DN этого пользователя и пытаемся прибиндится с этим DN и паролем введенным пользователем. Но проблема в другом, вроде как OpenLDAP поддерживает механизмы sasl (GSSAPI/KERBEROS5) авторизации. Моя рабочая станция введена в домен и авторизована, получен билет и есть файл krb5.
username@kubuntuit01:~$ sudo net ads testjoin
Join is OK
username@kubuntuit01:~$ sudo net ads keytab list
Vno Type Principal
2 des-cbc-crc HOST/kubuntuit01.mydomen.local@MYDOMEN.LOCAL
2 des-cbc-crc HOST/KUBUNTUIT01@MYDOMEN.LOCAL
2 des-cbc-md5 HOST/kubuntuit01.mydomen.local@MYDOMEN.LOCAL
2 des-cbc-md5 HOST/KUBUNTUIT01@MYDOMEN.LOCAL
2 aes128-cts-hmac-sha1-96 HOST/kubuntuit01.mydomen.local@MYDOMEN.LOCAL
2 aes128-cts-hmac-sha1-96 HOST/KUBUNTUIT01@MYDOMEN.LOCAL
2 aes256-cts-hmac-sha1-96 HOST/kubuntuit01.mydomen.local@MYDOMEN.LOCAL
2 aes256-cts-hmac-sha1-96 HOST/KUBUNTUIT01@MYDOMEN.LOCAL
2 arcfour-hmac-md5 HOST/kubuntuit01.mydomen.local@MYDOMEN.LOCAL
2 arcfour-hmac-md5 HOST/KUBUNTUIT01@MYDOMEN.LOCAL
LDAPAsynConnection * sas;
sas = new LDAPAsynConnection();
sas->init("dc.mydomen.local",389);
sas->saslBind("GSSAPI","uid=HOST/KUBUNTUIT01,cn=MYDOMEN.LOCAL,cn=gssapi,cn=auth",cons);
Первый параметр в строке биндинга верный, так как при указании другого, сервер выдает ошибку о неверном механизме авторизации. второй параметр - std::string&cred - значение авторизации. Если его оставить пустым то сервер возвращает ответ об ожидании следующего запроса со значением cred. Что я только не пробовал туда запихать, но всегда получаю ответ сервера : 80090308: LdapErr: DSID-0C0904DC, comment: AcceptSecurityContext error, data 57, v1db1 Код ошибки 49 : Invalid credentials (49) Ясно что неверные данные авторизации. Может кто подскажет что там указывать ? Нужна автоматическая авторизация если машина в домене и пользователь авторизован. Спасибо.