Tenemos un servidor escrito en Delphi que usa RemObjects DataAbstract/SDK. Nos gustaría utilizar la autenticación de Windows para autenticar a los usuarios para permitirles el acceso a nuestro servidor.Cómo autenticar a un usuario en el nivel medio mediante la autenticación de Windows
Actualmente haga lo siguiente:
1 aplicación de cliente) envía el nombre de usuario y contraseña de Windows en texto sin cifrar al servidor. 2) El servidor comprueba las credenciales usando la siguiente función:
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;
Por supuesto, este método tiene la desventaja de que las credenciales de usuario se transmiten sobre la red en texto claro. Podríamos encriptarlos, pero las claves de cifrado/descifrado deberían enviarse dentro de la aplicación.
Estoy seguro de que debe haber una mejor manera de lograr nuestro objetivo. He leído un poco sobre tokens, pero realmente no entiendo cómo funcionarían en esta situación.
Tenga en cuenta que la solución debe funcionar tanto para un cliente Delphi Windows como para un cliente Delphi Prism ASP.NET.
Gracias por cualquier ayuda que pueda dar.
¿Ha considerado utilizar una solución basada en Kerberos? Requiere una instancia de Kerberos ejecutándose en la red, pero es uno de los protocolos de autenticación estándar de facto en una red no segura. http://en.wikipedia.org/wiki/Kerberos_%28protocol%29 – mjn
Si tiene un dominio AD, tiene Kerberos, aunque Windows tiene un mecanismo para permitir que diferentes métodos de autenticación funcionen con la misma interfaz –
¿Es una intranet? (o VPN) o una aplicación basada en Internet? Para Intranet y Kerberos, quizás esto ayude: http://stackoverflow.com/questions/1052369/how-can-i-get-a-kerberos-ticket-with-delphi – mjn