Конференция "WinAPI" » Доменная авторизация без ввода пароля. [WinXP]
 
  • Дмитрий С (26.03.09 05:11) [0]
    Есть приложение Клиент-Сервер
    Как Клиенту "доказать" серверу, что он запущен от имени какого-либо доменного пользователя?
  • brother © (26.03.09 05:14) [1]
    собственно, сервер это что в твоем понимании? тк сервер знает всех своих пользователей...
    клиент где запущен?
  • Дмитрий С (26.03.09 05:24) [2]
    Сервер - это некое приложение. Клиент - тоже некое приложение. Оба разрабатываются мной.
    Оба приложения запущены на разных машинах (обе в одном и том же домене) и взаимодействуют с помощью TCP.
    Клиент присоединяется к Серверу и должен пройти там авторизацию. Точнее передать имя пользователя от которого запущено приложение Клиента и каким-то образом доказать что он от имени этого пользователя и запущен.
    Можно было бы на клиенте спрашивать пароль у пользователя и передавать его Серверу, который в свою очередь просто попробует присоединиться к LDAPу домена, но задача рекомендует ничего лишнего не спрашивать у пользователя. (Т.е. пользователь один раз вводит пароль только при "входе в компьютер").

    У меня такое предчувствие, что копать нужно в сторону NTLM.
  • brother © (26.03.09 05:34) [3]
    1. получаем имя пользователя
    2. отправляем серверу
    3. сервер проверят пользователя на принадлежность к домену
    4. если все прошло удачно...)
  • Дмитрий С (26.03.09 05:36) [4]

    > brother ©   (26.03.09 05:34) [3]

    Это, конечно просто, но на практике злоумышленник может отправить любое имя пользователя, вот в чем беда.
  • brother © (26.03.09 05:38) [5]
    не понял? как это он может отправить? твоя прога отправляет, никого не спрашивает... или что, я чет не пойму.
  • Дмитрий С (26.03.09 05:42) [6]
    Вот как NetBios это делает? Он ведь не переспрашивает пароль при заходе на удаленный компьютер.
  • Дмитрий С (26.03.09 05:44) [7]

    > brother ©   (26.03.09 05:38) [5]
    >
    > не понял? как это он может отправить? твоя прога отправляет,
    >  никого не спрашивает... или что, я чет не пойму.

    Моя прога отправляет все-как-надо. Но если исходник попадет "врагу", он найдет этот недостаток, то сможет авторизироваться на моем сервере от имени любого пользователя и нанести вреда.
  • brother © (26.03.09 05:53) [8]
    > Моя прога отправляет все-как-надо. Но если исходник попадет
    > "врагу"
    , он найдет этот недостаток, то сможет авторизироваться
    > на моем сервере от имени любого пользователя и нанести вреда.

    1. если такое случится - тебя ничто не спасет!
    2. надеюсь исходники клиента и сервера разные?
    3. не парься, сделай как я тебе сказал, а то, мне кажется, ты ща наворотишь)
  • brother © (26.03.09 05:55) [9]
    > Вот как NetBios это делает? Он ведь не переспрашивает пароль
    > при заходе на удаленный компьютер.

    ерунду не говори
  • Дмитрий С (26.03.09 06:28) [10]

    > 1. если такое случится - тебя ничто не спасет!
    > 2. надеюсь исходники клиента и сервера разные?
    > 3. не парься, сделай как я тебе сказал, а то, мне кажется,
    >  ты ща наворотишь)

    Как это не спасет. Вот и спасет грамотная авторизация.


    > brother ©   (26.03.09 05:55) [9]
    >
    > > Вот как NetBios это делает? Он ведь не переспрашивает
    > пароль
    > > при заходе на удаленный компьютер.
    >
    > ерунду не говори

    А что, у тебя спрашивает?
    Я не думаю, что NetBios устроен так, что просто передает имя пользователя и серверу этого достаточно.
  • brother © (26.03.09 06:51) [11]
    > Как это не спасет. Вот и спасет грамотная авторизация.

    Ты не ответил [8] п.2
  • Дмитрий С (26.03.09 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 © (26.03.09 07:06) [13]
    > ее можно выполнить "просто так".

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

    > Конечно разные. Хотя это не имеет никакого значения. Исходник
    > может быть и открыт, это не должно отражаться на безопасности.

    нюню
  • Дмитрий С (26.03.09 07:08) [14]

    > > Конечно разные. Хотя это не имеет никакого значения. Исходник
    > > может быть и открыт, это не должно отражаться на безопасности.
    >
    >
    > нюню

    Заканчивай флейм.


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

    И как же по твоему сервер узнает есть у пользователя права или нет. Как он вообще узнает от какого пользователя запрос?
  • brother © (26.03.09 07:09) [15]
    > Заканчивай флейм.

    закончил
  • Дмитрий С (26.03.09 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 сервере, так же я хочу авторизироваться в собственном сервере. Причем меня интересует не только как организовать авторизацию в Клиенте, но и как ее организовать на Сервере.
  • Дмитрий С (27.03.09 05:04) [17]
    Для тех кто будет искать, решение основывается на функциях
    InitializeSecurityContext
    AcceptSecurityContext
  • Eraser © (27.03.09 17:40) [18]
    > [17] Дмитрий С   (27.03.09 05:04)

    способов масса. читайте Рихтера - программирование серверных приложений. там все описано и полно примеров.
  • Дмитрий С (30.03.09 07:27) [19]

    > Eraser ©   (27.03.09 17:40) [18]

    О, а я про него и забыл. Спасибо!
 
Конференция "WinAPI" » Доменная авторизация без ввода пароля. [WinXP]
Есть новые Нет новых   [134435   +35][b:0][p:0.002]