•  

ГлавнаяIndyЧастые вопросы по Indy → Корпоративный чат с интеграцией в AD

Создано: 17.05.2014 3:33:57 · Исправлено: 17.05.2014 3:33:57 · Прочтений: 1300

Всем привет! Нужен совет, а желательно и помощь.
В общем ситуация такая - есть сетка, в которой поднято АД. Задача: написать корпаративный чат. Собственно вопрос - в авторизации. Поясняю - необходимо сделать так чтобы если человек зашел под доменным пользователем - то при запуске чат-клиента он на сервере чата авторизуется автоматически, если не под доменным юзверем - то ему выдается приглашение на авторизацию, и после ввода логина и пароля проверяется в домене. Как реализовать вторую часть я знаю - нашел пример в инете. А вот как сделать прозрачную (для юзвера) авторизацию, не знаю, и не просто разрешено/запрещено, но и его индетификатор (уникальный/однозначный) в домене (я конешно могу на клиенте определять, что пользователь, запустивший прогу, принадлежит такому-то домену, и далее просто передавать серверной части его логин, но мне кажется, это криво - я не очень разбираюсь в этом, но наверника есть какие-то механизмы прозрачной авторизации - подскажите плиз какие и желательно с примерчиками).
Ребят это что настолько не простая задача или настолько простоя, как присвоение значение переменной - возьми любую книжку для начинающих, что не нуждаеться в ответе?. Ну подскажите плиз - чтобы искать в инете надо хотябы знать что искать. :(
Если Вы используете транспорт со встроенной поддержкой защиты (COM, Named Pipe, etc), то задача действительно тривиальная - та же имперсонация даст ответы на все вопросы о клиенте. Если сокеты, то в общем случае без передачи аттрибутов клиента не обойтись. Как частный случай, можно по IP определить машину, а дальше дело техники - это если IP гарантированно истинный.
я использую сокеты - конкретней indy 10. Ну допустим по ip я могу определить что у машины такое то имя, далее что машина с таким именем используеться в АД, и что? кто сказал что пользователь зашедший на машину - зашел на нее не локально? Вопрос в том какие атребуты надо взять и куда (ну не совсем куда а каким методом их обработать на сервере) передать чтобы прозрачно авторизаваться. Есть наглядный пример: допустим есть домен Domen1, в домене сервер, на нем есть шара открытая для юзвера Duser, далее есть в домене комп Comp1 и на компе есть локальный юзер Luser. Так вот если пользователь зашел на Comp1 как Domen1\Duser и лезет на шару то его пускают без проблем, если пользователь вошел на Comp1 как Comp1\Luser и лезет то ему выдаеться приглашение на авторизацию. Есть много анологичных примеров - авторизация на проксе, авторизация в программах типа IBN, kerio mail server+kerio outlook connector и т.д. Так вот есть же какие то механизмы которое это реализуют. Собственно вопрос стоит в том что это за механизмы и как их реализовать в моем случае. Способ на коленке я знаю - как раз берем на локале все что может (ip,имя компа, имя извера, sid, guid и так далее), передаем серверной части, далее она ломиться в AD и по какимто мной выбранным принцепам начинаем что то проверять - но если есть уже готовые механизмы в ОС и AD то лудше наверное использовать их? Вот собственно и весь вопрос что это за механизмы и желательно как их отработать в коде? :(
Так вот есть же какие то механизмы которое это реализуют

Конечно есть, но Вы ошибаетесь, если думаете, что для этого достсчно включить какую-нибудь гайку в системе или вызвать пару-тройку функций.

лезет на шару то его пускают без проблем

Это обеспечивает NT LAN Maneger, в котором реализована поддежка протоколов безопасности. Вот и Вам нужно будет включить в свое приложение эту поддержку. Изучайте NTLM, Kerberos или что там у Вас используется.

Впрочем, в XP появились функции CredXXX, но я из них использовал только CredUIPromptForCredentials. Посмотрите, возможно они имеют к Вашей задаче какое-то отношение.