Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Сети > Организация авторизации в домене


Автор: Patjomkin 9.4.2008, 16:21
Здравствуйте. Передо мной стоит следующая задача: нужно написать клиент-сервер, с возможностью авторизации клиента "tr" на сервере "tr" используя windows аутентификацию: 1) используя текущий логин и пароль (если компьютер входит в тот домен, в котором работает "tr" сервер) и  2) используя вводимые пользователем логин, пароль и домен (если машина не входит в данный домен). Аналогичная авторизации производится в довольно известном продукте - Traffic Inspector.
 Задача для меня новая (не приходилось сталкиваться с windows аутентификацией), хотя и интересная, но времени как бы не очень много на реализацию этих функций. 
Может кто сталкивался с такой задачей или может объяснить или намекнуть как грамотно реализовать её ... где порыться, чего почитать... Буду очень обязан любой помощи.
PS: поиском пользоваться умею ... походу в этот раз не повезло.

Автор: Pulse69 10.4.2008, 09:07
В Windows это реализуется посредством Security Service Provider Interface (SSPI). Вообще, тема довольно обширная, так что просто на этот вопрос ответить не выйдет.
Для начала, надо прочитать раздел Authentification из Platform SDK.
http://msdn2.microsoft.com/en-us/library/aa374735(VS.85).aspx
Если время поджимает, сразу переходим в раздел Using SSPI smile

Там в разделе Using Authentification->Using SSPI есть пример WINSOCK-клиента и WINSOCK-сервера, которые аутентифицируются с помощью SSPI. Эти примеры как раз для использования текущей учётной записи.
Чтобы использовать указанные имя пользователя, домен и пароль, нужно на стороне клиента, при вызове функции AcquireCredentialsHandle, в параметре pAuthData передать указатель на структуру SEC_WINNT_AUTH_IDENTITY, в которой нужно указать домен, имя пользователя и его пароль. Естественно, так же можно поступить и на стороне сервера, только мысла в этом нет.

Да, ещё важно не забыть, что по умолчанию в доменах Windows применяется Kerberos-протокол аутентификации. Для того, чтобы всё прошло корректно, для учётной записи, под которой запускается сервер, нужно создать SPN. Именно это значение должно указываться на стороне клиента  в функции InitializeSecurityContext в параметре pszTargetName. Обычно, это делается с помощью программы setspn.exe

Автор: Patjomkin 10.4.2008, 09:37
Pulse69, спасибо большое .. загрузка 100% оказывается я вообще не в курсе этой темы smile) Зато теперь ясно в чём разбираться нужно. Пошёл рыться в документации. Ещё раз спасибо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)