Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.062 c
2-1268099427
Б
2010-03-09 04:50
2010.08.27
Fill pointer.


15-1274364250
Sergey Masloff
2010-05-20 18:04
2010.08.27
Работа с RFID метками. Пробовал кто?


15-1270033255
pasha_golub
2010-03-31 15:00
2010.08.27
DLL средствами MSVC Express 2008


2-1269160832
pavel_guzhanov
2010-03-21 11:40
2010.08.27
Как проверить, что элемент массива пустой?


6-1217411834
Lamer666
2008-07-30 13:57
2010.08.27
Сессии HTTPS





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский