La pantalla de inicio de sesión es la parte de una aplicación empresarial sobre la que todos los clientes tienen una opinión. ¿Podemos iniciar sesión con nuestra cuenta de Entra ID? ¿Admite passkeys? Nuestros auditores quieren dos factores. Nuestros usuarios están en Active Directory, ¿por qué necesitan otra contraseña? Y el correo que envía tu aplicación dejó de funcionar el día en que Microsoft 365 rechazó la contraseña en la configuración SMTP.
Cada una de esas preguntas es un protocolo con su propia especificación, su propio XML o ASN.1, y sus propias formas de quedarse casi bien. Los nuevos componentes de autenticación empresarial las responden como componentes Delphi. Se incluyen en las ediciones Enterprise y All-Access de sgcWebSockets y en el paquete sgcAuth, y los mismos componentes forman parte de sgcWebSockets .NET.
Passkeys, tal como los usuarios los esperan
El servidor WebAuthn ahora cubre lo que la gente realmente quiere decir cuando habla de passkeys:
- Inicio de sesión sin nombre de usuario. El usuario pulsa un botón, el navegador ofrece los passkeys que tiene guardados para tu sitio, y la cuenta se identifica por la credencial. No hay nada que escribir.
- Autocompletado. Los passkeys aparecen en la propia lista de sugerencias del navegador en el campo de nombre de usuario, junto a las contraseñas guardadas, de modo que una página de inicio de sesión puede ofrecer ambos mientras los usuarios hacen la transición.
- Varios passkeys por usuario. Uno en el teléfono, otro en el portátil, y una llave física en un cajón para el día en que se pierdan los dos.
- Detección de passkeys sincronizados. El servidor distingue un passkey que la plataforma respalda y sincroniza de uno vinculado a un único dispositivo, de modo que tu política puede tratarlos de forma diferente.
- Tu propia base de datos. Los passkeys se guardan junto a tu tabla de usuarios, no en un archivo que controla el componente.
Inicio de sesión único SAML
Los grandes clientes no quieren que su personal tenga una cuenta en tu aplicación. Quieren que inicien sesión con el proveedor de identidad que la empresa ya utiliza. TsgcSAMLServiceProvider convierte tu aplicación en un proveedor de servicios SAML 2.0 para Entra ID, Okta, AD FS, Google Workspace y Keycloak. El proveedor de identidad se encarga del inicio de sesión, tu aplicación recibe una aserción, y la firma de esa aserción se valida antes de que veas ningún nombre de usuario.
Inicio de sesión en Active Directory y LDAP
Para la aplicación que se ejecuta dentro de la red de la empresa, los usuarios ya tienen una contraseña: la de Windows. TsgcLDAPClient comprueba un nombre de usuario y una contraseña contra Active Directory o cualquier directorio LDAP, mediante LDAPS o StartTLS para que la contraseña nunca cruce la red en claro. Asigna ldapsecLDAPS o ldapsecStartTLS a Security y llama a Authenticate.
Saber quién es el usuario solo responde la mitad de la pregunta. GetUserGroups devuelve los grupos a los que pertenece la cuenta, incluidos los grupos anidados, de modo que “¿es este usuario un aprobador de facturas?” es una sola llamada en lugar de una búsqueda recursiva que tienes que escribir y depurar tú mismo.
Códigos de doble factor desde una aplicación autenticadora
TsgcTOTPAuthenticator genera y comprueba los códigos de seis dígitos de Google Authenticator, Microsoft Authenticator y cualquier otra aplicación TOTP. El registro consiste en un secreto y una URI que muestras como código QR. El inicio de sesión es una sola llamada:
uses
sgcAuth_TOTP, sgcBase_Helpers;
var
oTOTP: TsgcTOTPAuthenticator;
vSecret, vURI: string;
vLastStep: Int64;
begin
oTOTP := TsgcTOTPAuthenticator.Create(nil);
try
oTOTP.Issuer := 'MyApp';
// enrolment: store vSecret with the user, show vURI as a QR code
vSecret := oTOTP.GenerateSecret;
vURI := oTOTP.GetProvisioningURI('john@example.com', vSecret);
// sign-in: vLastStep is the last step accepted for this user, -1 the first time
vLastStep := -1;
if oTOTP.VerifyCode(vSecret, txtCode.Text,
StrToInt64(GetDateTimeUnix(Now)), vLastStep) then
ShowMessage('Signed in') // save vLastStep, this code is now spent
else
ShowMessage('Wrong, expired or already used');
finally
oTOTP.Free;
end;
end;
Esa sobrecarga es la protección contra reproducción: un código que ya se ha aceptado se rechaza, incluso dentro de sus propios treinta segundos, de modo que un código leído por encima del hombro de alguien no vale nada una vez que se ha usado. Para el día en que se pierda el teléfono, GenerateRecoveryCodes rellena una lista con códigos de recuperación de un solo uso. Guárdalos como guardas las contraseñas.
Inicio de sesión con OpenID Connect
TsgcHTTP_OIDC_Client inicia la sesión de los usuarios con cualquier proveedor OpenID Connect. Lee el documento de descubrimiento del proveedor, de modo que la configuración es una URL de emisor y un ID de cliente en lugar de una lista de endpoints copiados a mano. Valida el token de ID que recibe, y las mismas claves de firma validan los tokens portador que llegan a tu propia API REST, incluidos los tokens de aplicaciones multiinquilino de Entra ID, donde el tenant de cada cliente firma con su propio emisor.
OAuth2 para el correo de Microsoft 365 y Gmail
Microsoft 365 y Gmail esperan OAuth2, no una contraseña, de SMTP, IMAP y POP3. TsgcMailOAuth2 obtiene el token de acceso, lo renueva y construye la cadena XOAUTH2 con la que inicia sesión tu sesión SMTP, IMAP o POP3. Elige el proveedor y los protocolos, dale tu ID de cliente, y guarda el token de actualización cuando se dispare OnTokensChanged. Un servicio o una aplicación de consola sin navegador puede usar en su lugar el flujo de código de dispositivo.
Prueba las demos
Cada componente tiene una demo ejecutable en Demos\26.Authentication:
01.Passkeys, inicio de sesión sin nombre de usuario y autocompletado en el navegador.02.TOTP, registro con código QR, verificación y códigos de recuperación.03.SAML_ServiceProvider, inicio de sesión único contra tu proveedor de identidad.04.OpenID_Connect, inicio de sesión y validación de tokens.05.LDAP_ActiveDirectory, inicio de sesión y pertenencia a grupos.06.Mail_OAuth2, envío de correo desde Microsoft 365 o Gmail con OAuth2.
Documentación
- Passkeys
- TsgcSAMLServiceProvider
- TsgcLDAPClient
- TsgcTOTPAuthenticator
- TsgcHTTP_OIDC_Client
- TsgcMailOAuth2
Dónde conseguirlos
Los componentes están incluidos en las ediciones Enterprise y All-Access de sgcWebSockets, para Delphi, C++ Builder y .NET. Si solo necesitas autenticación, el paquete sgcAuth los ofrece por separado. Son aditivos: nada cambia en una aplicación existente hasta que colocas uno en un formulario.
Sigue leyendo
Míralo en vídeo
Hay un vídeo breve, “Delphi login with passkeys, SAML SSO, Active Directory LDAP and TOTP 2FA”, en el canal de eSeGeCe.
¿Preguntas, comentarios o ayuda para integrar esto en tu página de inicio de sesión? Ponte en contacto. Recibirás respuesta de las personas que escribieron el código.
