Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.08.27;
Скачать: CL | DM;

Вниз

Доменная авторизация без ввода пароля.   Найти похожие ветки 

 
Дмитрий С   (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 вся ветка

Текущий архив: 2010.08.27;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.057 c
15-1267479001
Юрий
2010-03-02 00:30
2010.08.27
С днем рождения ! 2 марта 2010 вторник


2-1273056659
Свободный художник
2010-05-05 14:50
2010.08.27
Заблокировать ввод в определенные ячейки StringGrid


2-1274523488
Delphist2
2010-05-22 14:18
2010.08.27
excel


15-1268044055
Некто
2010-03-08 13:27
2010.08.27
[ООП] Хочу странного


4-1238033493
Дмитрий С
2009-03-26 05:11
2010.08.27
Доменная авторизация без ввода пароля.