-
Есть приложение Клиент-Сервер Как Клиенту "доказать" серверу, что он запущен от имени какого-либо доменного пользователя?
-
собственно, сервер это что в твоем понимании? тк сервер знает всех своих пользователей... клиент где запущен?
-
Сервер - это некое приложение. Клиент - тоже некое приложение. Оба разрабатываются мной. Оба приложения запущены на разных машинах (обе в одном и том же домене) и взаимодействуют с помощью TCP. Клиент присоединяется к Серверу и должен пройти там авторизацию. Точнее передать имя пользователя от которого запущено приложение Клиента и каким-то образом доказать что он от имени этого пользователя и запущен. Можно было бы на клиенте спрашивать пароль у пользователя и передавать его Серверу, который в свою очередь просто попробует присоединиться к LDAPу домена, но задача рекомендует ничего лишнего не спрашивать у пользователя. (Т.е. пользователь один раз вводит пароль только при "входе в компьютер").
У меня такое предчувствие, что копать нужно в сторону NTLM.
-
1. получаем имя пользователя 2. отправляем серверу 3. сервер проверят пользователя на принадлежность к домену 4. если все прошло удачно...)
-
> brother © (26.03.09 05:34) [3]
Это, конечно просто, но на практике злоумышленник может отправить любое имя пользователя, вот в чем беда.
-
не понял? как это он может отправить? твоя прога отправляет, никого не спрашивает... или что, я чет не пойму.
-
Вот как NetBios это делает? Он ведь не переспрашивает пароль при заходе на удаленный компьютер.
-
> brother © (26.03.09 05:38) [5] > > не понял? как это он может отправить? твоя прога отправляет, > никого не спрашивает... или что, я чет не пойму.
Моя прога отправляет все-как-надо. Но если исходник попадет "врагу", он найдет этот недостаток, то сможет авторизироваться на моем сервере от имени любого пользователя и нанести вреда.
-
> Моя прога отправляет все-как-надо. Но если исходник попадет > "врагу", он найдет этот недостаток, то сможет авторизироваться > на моем сервере от имени любого пользователя и нанести вреда.
1. если такое случится - тебя ничто не спасет! 2. надеюсь исходники клиента и сервера разные? 3. не парься, сделай как я тебе сказал, а то, мне кажется, ты ща наворотишь)
-
> Вот как NetBios это делает? Он ведь не переспрашивает пароль > при заходе на удаленный компьютер.
ерунду не говори
-
> 1. если такое случится - тебя ничто не спасет! > 2. надеюсь исходники клиента и сервера разные? > 3. не парься, сделай как я тебе сказал, а то, мне кажется, > ты ща наворотишь)
Как это не спасет. Вот и спасет грамотная авторизация.
> brother © (26.03.09 05:55) [9] > > > Вот как NetBios это делает? Он ведь не переспрашивает > пароль > > при заходе на удаленный компьютер. > > ерунду не говори
А что, у тебя спрашивает? Я не думаю, что NetBios устроен так, что просто передает имя пользователя и серверу этого достаточно.
-
> Как это не спасет. Вот и спасет грамотная авторизация.
Ты не ответил [8] п.2
-
> brother © (26.03.09 06:51) [11]
Конечно разные. Хотя это не имеет никакого значения. Исходник может быть и открыт, это не должно отражаться на безопасности. Взять к примеру АПИшную функцию function NetGroupGetInfo(ServerName, GroupName : LPWSTR; Level : DWORD;
Buffer : PGROUP_INFO_1) : LongInt; StdCall; External 'netapi32.dll'; ее можно выполнить "просто так". Как то же она докажет серверу указанному в ServerName, что у меня есть права получать информацию о группе.
-
> ее можно выполнить "просто так".
нет, если у доменного пользователя вызвавшего это не будет прав, то ему ничего не отдадут... а теперь, вместо утверждений, начинай задавать конкретные вопросы. твой сабж, сформулирован не верно, серверу ничего доказывать не надо, переформулируй вопрос.
> Конечно разные. Хотя это не имеет никакого значения. Исходник > может быть и открыт, это не должно отражаться на безопасности.
нюню
-
> > Конечно разные. Хотя это не имеет никакого значения. Исходник > > может быть и открыт, это не должно отражаться на безопасности. > > > нюню
Заканчивай флейм.
> нет, если у доменного пользователя вызвавшего это не будет > прав, то ему ничего не отдадут... > а теперь, вместо утверждений, начинай задавать конкретные > вопросы. > твой сабж, сформулирован не верно, серверу ничего доказывать > не надо, переформулируй вопрос.
И как же по твоему сервер узнает есть у пользователя права или нет. Как он вообще узнает от какого пользователя запрос?
-
> Заканчивай флейм.
закончил
-
Возьмем, к примеру NTLM авторизацию браузера (IE) и прокси-сервера (ISA):
Клиент -> Сервер (Просто запрос)
GET http: 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: 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: Proxy-Authorization: NTLM TlRMTVNTUAADABBBGAAYAGoAAAAYABgAggAAAAwADABIAAAABgAGAFQAAAAQABAAWgAAAAAAAACaAAAA BYKIogUBKAoAAAAPUwBBAEsASABHAFUAVgBpAGQAQgAxAC0AMwA2AC0AMQAzAKLDlP/xrDcHAAAAAAAAAAAAAAAAAAAAAAB7a8/dsO5+3wjN34busj10GNuG+oPY0A==
Host: ya.ru
Proxy-Connection: Keep-Alive
Сервер -> Клиент (Авторизован, ура!)
HTTP/1.1 200 OK
При этом браузер НЕ спрашивает пароль у пользователя, а использует учетную запись от имени которой он запущен. Насколько я понимаю у IE даже пароля нет в открытом виде. Так же как IE авторизуется на ISA сервере, так же я хочу авторизироваться в собственном сервере. Причем меня интересует не только как организовать авторизацию в Клиенте, но и как ее организовать на Сервере.
-
Для тех кто будет искать, решение основывается на функциях InitializeSecurityContext AcceptSecurityContext
-
> [17] Дмитрий С (27.03.09 05:04)
способов масса. читайте Рихтера - программирование серверных приложений. там все описано и полно примеров.
-
> Eraser © (27.03.09 17:40) [18]
О, а я про него и забыл. Спасибо!
|