LINUX.ORG.RU

OpenLDAP sasl авторизация в Windows AD

 , ,


0

1

Добрый день форумчане. Зарегился специально на этом форуме, так как именно тут нашел несколько советов по решению своих проблем. На других форумах что то тишина по моим вопросам, либо я туповатые вопросы задаю либо нет ответа. Итак предыстория, всегда писал под 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
Пытаюсь авторизоваться используя sasl не выходит.

  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) Ясно что неверные данные авторизации. Может кто подскажет что там указывать ? Нужна автоматическая авторизация если машина в домене и пользователь авторизован. Спасибо.

- Можно в ldap авторизоваться сразу как username@domain.com - Скорее всего программа не видит keytab, к дополнению к господину выше, посоветую перечитать доки.

anonymous ()
Ответ на: комментарий от anonymous

Спасибо за подсказку, действительно можно авторизоваться используя userPrincipalName (username@domain.com), проверил сегодня все работает. С keytab пока не понятно, попробую еще почитать доки может что нарою.

Honey12345 ()

Так я и не смог победить проблему. Убил еще несколько дней, перечитал несколько раз документацию. Пробовал разные варианты, видимо где то я не догоняю. Неужто никто не решал такой задачи, хотел облегчить жизнь пользователям, но пока что приходится вводить пароль....

Honey12345 ()