Как аутентифицировать пользователя на среднем уровне с помощью аутентификации Windows

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

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

1) Клиентское приложение отправляет имя пользователя Windows и пароль в виде открытого текста на сервер. Мы хотели бы использовать аутентификацию Windows для аутентификации пользователей, чтобы разрешить им доступ к нашему серверу. В настоящее время мы выполняем ...

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

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

1) Клиентское приложение отправляет имя пользователя Windows и пароль в виде открытого текста на сервер. Мы хотели бы использовать аутентификацию Windows для аутентификации пользователей, чтобы разрешить им доступ к нашему серверу. В настоящее время мы выполняем ...

У нас есть сервер, написанный на 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.

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

8
задан norgepaul 16 December 2010 в 14:07
поделиться