Форум: "WinAPI";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
ВнизДоменная авторизация без ввода пароля. Найти похожие ветки
← →
Дмитрий С (2009-03-26 05:11) [0]Есть приложение Клиент-Сервер
Как Клиенту "доказать" серверу, что он запущен от имени какого-либо доменного пользователя?
← →
brother © (2009-03-26 05:14) [1]собственно, сервер это что в твоем понимании? тк сервер знает всех своих пользователей...
клиент где запущен?
← →
Дмитрий С (2009-03-26 05:24) [2]Сервер - это некое приложение. Клиент - тоже некое приложение. Оба разрабатываются мной.
Оба приложения запущены на разных машинах (обе в одном и том же домене) и взаимодействуют с помощью TCP.
Клиент присоединяется к Серверу и должен пройти там авторизацию. Точнее передать имя пользователя от которого запущено приложение Клиента и каким-то образом доказать что он от имени этого пользователя и запущен.
Можно было бы на клиенте спрашивать пароль у пользователя и передавать его Серверу, который в свою очередь просто попробует присоединиться к LDAPу домена, но задача рекомендует ничего лишнего не спрашивать у пользователя. (Т.е. пользователь один раз вводит пароль только при "входе в компьютер").
У меня такое предчувствие, что копать нужно в сторону NTLM.
← →
brother © (2009-03-26 05:34) [3]1. получаем имя пользователя
2. отправляем серверу
3. сервер проверят пользователя на принадлежность к домену
4. если все прошло удачно...)
← →
Дмитрий С (2009-03-26 05:36) [4]
> brother © (26.03.09 05:34) [3]
Это, конечно просто, но на практике злоумышленник может отправить любое имя пользователя, вот в чем беда.
← →
brother © (2009-03-26 05:38) [5]не понял? как это он может отправить? твоя прога отправляет, никого не спрашивает... или что, я чет не пойму.
← →
Дмитрий С (2009-03-26 05:42) [6]Вот как NetBios это делает? Он ведь не переспрашивает пароль при заходе на удаленный компьютер.
← →
Дмитрий С (2009-03-26 05:44) [7]
> brother © (26.03.09 05:38) [5]
>
> не понял? как это он может отправить? твоя прога отправляет,
> никого не спрашивает... или что, я чет не пойму.
Моя прога отправляет все-как-надо. Но если исходник попадет "врагу", он найдет этот недостаток, то сможет авторизироваться на моем сервере от имени любого пользователя и нанести вреда.
← →
brother © (2009-03-26 05:53) [8]> Моя прога отправляет все-как-надо. Но если исходник попадет
> "врагу", он найдет этот недостаток, то сможет авторизироваться
> на моем сервере от имени любого пользователя и нанести вреда.
1. если такое случится - тебя ничто не спасет!
2. надеюсь исходники клиента и сервера разные?
3. не парься, сделай как я тебе сказал, а то, мне кажется, ты ща наворотишь)
← →
brother © (2009-03-26 05:55) [9]> Вот как NetBios это делает? Он ведь не переспрашивает пароль
> при заходе на удаленный компьютер.
ерунду не говори
← →
Дмитрий С (2009-03-26 06:28) [10]
> 1. если такое случится - тебя ничто не спасет!
> 2. надеюсь исходники клиента и сервера разные?
> 3. не парься, сделай как я тебе сказал, а то, мне кажется,
> ты ща наворотишь)
Как это не спасет. Вот и спасет грамотная авторизация.
> brother © (26.03.09 05:55) [9]
>
> > Вот как NetBios это делает? Он ведь не переспрашивает
> пароль
> > при заходе на удаленный компьютер.
>
> ерунду не говори
А что, у тебя спрашивает?
Я не думаю, что NetBios устроен так, что просто передает имя пользователя и серверу этого достаточно.
← →
brother © (2009-03-26 06:51) [11]> Как это не спасет. Вот и спасет грамотная авторизация.
Ты не ответил [8] п.2
← →
Дмитрий С (2009-03-26 06:58) [12]
> brother © (26.03.09 06:51) [11]
Конечно разные. Хотя это не имеет никакого значения. Исходник может быть и открыт, это не должно отражаться на безопасности.
Взять к примеру АПИшную функциюfunction NetGroupGetInfo(ServerName, GroupName : LPWSTR; Level : DWORD;
Buffer : PGROUP_INFO_1) : LongInt; StdCall; External "netapi32.dll";
ее можно выполнить "просто так". Как то же она докажет серверу указанному в ServerName, что у меня есть права получать информацию о группе.
← →
brother © (2009-03-26 07:06) [13]> ее можно выполнить "просто так".
нет, если у доменного пользователя вызвавшего это не будет прав, то ему ничего не отдадут...
а теперь, вместо утверждений, начинай задавать конкретные вопросы.
твой сабж, сформулирован не верно, серверу ничего доказывать не надо, переформулируй вопрос.
> Конечно разные. Хотя это не имеет никакого значения. Исходник
> может быть и открыт, это не должно отражаться на безопасности.
нюню
← →
Дмитрий С (2009-03-26 07:08) [14]
> > Конечно разные. Хотя это не имеет никакого значения. Исходник
> > может быть и открыт, это не должно отражаться на безопасности.
>
>
> нюню
Заканчивай флейм.
> нет, если у доменного пользователя вызвавшего это не будет
> прав, то ему ничего не отдадут...
> а теперь, вместо утверждений, начинай задавать конкретные
> вопросы.
> твой сабж, сформулирован не верно, серверу ничего доказывать
> не надо, переформулируй вопрос.
И как же по твоему сервер узнает есть у пользователя права или нет. Как он вообще узнает от какого пользователя запрос?
← →
brother © (2009-03-26 07:09) [15]> Заканчивай флейм.
закончил
← →
Дмитрий С (2009-03-26 08:38) [16]Возьмем, к примеру NTLM авторизацию браузера (IE) и прокси-сервера (ISA):
Клиент -> Сервер (Просто запрос)
GET http://ya.ru/ HTTP/1.0
Host: ya.ru
Сервер -> Клиент (Требование авторизации)
HTTP/1.1 407 Proxy Authentication Required ( The ISA Server requires authorization to fulfill the request. Access to the Web Proxy filter is denied. )
Proxy-Authenticate: Negotiate
Proxy-Authenticate: Kerberos
Proxy-Authenticate: NTLM
Connection: Keep-Alive
Proxy-Connection: Keep-Alive
Клиент -> Сервер (Передача имени пользователя)
GET http://ya.ru/ HTTP/1.0
Proxy-Authorization: NTLM TlRMTVNTUAABABBBB7IIogYABgAwAAAACAAIACgAAAAFASgKAAAAD0IxLTM2LTEzU0FLSEdV
Host: ya.ru
Сервер -> Клиент (Требование пароля)
HTTP/1.1 407 Proxy Authentication Required ( Access is denied. )
Proxy-Authenticate: NTLM TlRMTVNTUAACABBBDAAMADgAAAAFgomiOx3kIGe0rTMAAAAAAAAAAJIAkgBEAAAABQLODgAAAA9TAEEA SwBIAEcAVQACAAwAUwBBAEsASABHAFUAAQAYAEIAMQAtAEcAVwAtAEIAQQBDAEsAVQBQAAQAFABzAGEA awBoAGcAdQAuAG4AZQB0AAMALgBiADEALQBnAHcALQBiAGEAYwBrAHUAcAAuAHMAYQBrAGgAZwB1AC4A bgBlAHQABQAUAHMAYQBrAGgAZwB1AC4AbgBlAHQAAAAAAA==
Connection: Keep-Alive
Proxy-Connection: Keep-Alive
Клиент -> Сервер (Передача пароля)
GET http://ya.ru/ HTTP/1.0
Proxy-Authorization: NTLM TlRMTVNTUAADABBBGAAYAGoAAAAYABgAggAAAAwADABIAAAABgAGAFQAAAAQABAAWgAAAAAAAACaAAAA BYKIogUBKAoAAAAPUwBBAEsASABHAFUAVgBpAGQAQgAxAC0AMwA2AC0AMQAzAKLDlP/xrDcHAAAAAAAAAAAAAAAAAAAAAAB7a8/dsO5+3wjN34busj10GNuG+oPY0A==
Host: ya.ru
Proxy-Connection: Keep-Alive
Сервер -> Клиент (Авторизован, ура!)
HTTP/1.1 200 OK
При этом браузер НЕ спрашивает пароль у пользователя, а использует учетную запись от имени которой он запущен. Насколько я понимаю у IE даже пароля нет в открытом виде.
Так же как IE авторизуется на ISA сервере, так же я хочу авторизироваться в собственном сервере. Причем меня интересует не только как организовать авторизацию в Клиенте, но и как ее организовать на Сервере.
← →
Дмитрий С (2009-03-27 05:04) [17]Для тех кто будет искать, решение основывается на функциях
InitializeSecurityContext
AcceptSecurityContext
← →
Eraser © (2009-03-27 17:40) [18]> [17] Дмитрий С (27.03.09 05:04)
способов масса. читайте Рихтера - программирование серверных приложений. там все описано и полно примеров.
← →
Дмитрий С (2009-03-30 07:27) [19]
> Eraser © (27.03.09 17:40) [18]
О, а я про него и забыл. Спасибо!
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.065 c