Как аутентифицировать пользователя на среднем уровне, используя аутентификацию Windows - PullRequest
8 голосов
/ 16 декабря 2010

У нас есть сервер, написанный на Delphi, который использует RemObjects DataAbstract / SDK.Мы хотели бы использовать аутентификацию Windows для аутентификации пользователей, чтобы предоставить им доступ к нашему серверу.

В настоящее время мы делаем следующее:

1) Клиентское приложение отправляет имя пользователя и пароль Windows в виде открытого текстасервер.2) Сервер проверяет учетные данные, используя следующую функцию:

function ValidateUserLogonAPI(const UserName: string; const Domain: string;
  const PassWord: string) : boolean;
var
  Retvar: boolean;
  LHandle: THandle;
begin
  Retvar := LogonUser(PWideChar(UserName),
                                PWideChar(Domain),
                                PWideChar(PassWord),
                                LOGON32_LOGON_NETWORK,
                                LOGON32_PROVIDER_DEFAULT,
                                LHandle);

  if Retvar then
    CloseHandle(LHandle);

  Result := Retvar;
end;

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

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

Обратите внимание, что ее решение должно работать как для клиента Delphi Windows, так и для клиента Delphi Prism ASP.NET.

Спасибо за любую помощь, которую вы можете оказать.

1 Ответ

2 голосов
/ 16 декабря 2010

Это то, что DataAbstract должен обрабатывать сам, а если нет, то это библиотека с половинной поддержкой, как это делает Datasnap :) Когда речь идет о удаленном взаимодействии, аутентификация / авторизация конечных точек и защита обмена данными действительно важны.

По сути, вы должны отправлять не учетные данные пользователя, а обмениваться «токеном», который и клиент, и сервер знают, как проходить аутентификацию. Полное объяснение может быть сложным. Вы можете начать с MSDN (ищите AcceptSecurityContext () и InitializeSecurityContext ()). Возможная проблема заключается в том, что DataAbastract имеет подходящие хуки для реализации фазы аутентификации, для которой может потребоваться более одного обхода.

В качестве временной меры вы можете включить IPSec для защиты канала связи и не допустить, чтобы вся учетная запись пользователя была легко "прослушана".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...