La schermata di login è l'unica parte di un'applicazione aziendale su cui ogni cliente ha un'opinione. Possiamo accedere con il nostro account Entra ID? Supporta le passkey? I nostri revisori vogliono l'autenticazione a due fattori. I nostri utenti sono in Active Directory, perché serve un'altra password? E la posta inviata dalla tua applicazione ha smesso di funzionare il giorno in cui Microsoft 365 ha rifiutato la password nelle impostazioni SMTP.
Ognuna di queste domande è un protocollo con una propria specifica, un proprio XML o ASN.1, e propri modi di essere quasi corretto. I nuovi componenti di autenticazione aziendale rispondono a queste domande come componenti Delphi. Sono inclusi nelle edizioni Enterprise e All-Access di sgcWebSockets e nel pacchetto sgcAuth, e gli stessi componenti fanno parte anche di sgcWebSockets .NET.
Passkey, come le vogliono gli utenti
Il server WebAuthn ora copre ciò che le persone intendono davvero quando parlano di passkey:
- Accesso senza nome utente. L'utente preme un pulsante, il browser propone le passkey che ha salvato per il tuo sito, e l'account viene identificato dalla credenziale. Niente da digitare.
- Compilazione automatica. Le passkey compaiono nell'elenco di suggerimenti del browser sul campo del nome utente, accanto alle password salvate, così una pagina di login può offrire entrambe mentre gli utenti passano da una all'altra.
- Più passkey per utente. Una sul telefono, una sul laptop, una chiave hardware in un cassetto per il giorno in cui si perdono entrambe.
- Rilevamento delle passkey sincronizzate. Il server distingue una passkey che la piattaforma esegue il backup e sincronizza da una legata a un singolo dispositivo, così la tua policy può trattarle in modo diverso.
- Il tuo database. Le passkey risiedono accanto alla tua tabella utenti, non in un file gestito dal componente.
Single Sign-On SAML
I grandi clienti non vogliono che il loro personale abbia un account nella tua applicazione. Vogliono accedere con l'identity provider che l'azienda già utilizza. TsgcSAMLServiceProvider rende la tua applicazione un service provider SAML 2.0 per Entra ID, Okta, AD FS, Google Workspace e Keycloak. L'identity provider gestisce il login, la tua applicazione riceve un'asserzione, e la firma di quell'asserzione viene convalidata prima ancora che tu veda un nome utente.
Accesso ad Active Directory e LDAP
Per l'applicazione che gira all'interno della rete aziendale, gli utenti hanno già una password: quella di Windows. TsgcLDAPClient verifica un nome utente e una password contro Active Directory o qualsiasi directory LDAP, tramite LDAPS o StartTLS in modo che la password non attraversi mai la rete in chiaro. Imposta Security su ldapsecLDAPS o ldapsecStartTLS e chiama Authenticate.
Sapere chi è l'utente risponde solo a metà della domanda. GetUserGroups restituisce i gruppi a cui appartiene l'account, inclusi i gruppi annidati, così “questo utente è un approvatore di fatture” è una sola chiamata invece di una ricerca ricorsiva che devi scrivere e debuggare da solo.
Codici a due fattori da un'app di autenticazione
TsgcTOTPAuthenticator genera e verifica i codici a sei cifre di Google Authenticator, Microsoft Authenticator e qualsiasi altra app TOTP. La registrazione consiste in un segreto e un URI che mostri come codice QR. L'accesso è una sola chiamata:
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;
Quell'overload è la protezione dal replay: un codice già accettato viene rifiutato, anche entro i suoi trenta secondi, così un codice letto da qualcuno alle tue spalle non vale nulla una volta usato. Per il giorno in cui perdi il telefono, GenerateRecoveryCodes riempie una lista con codici di recupero monouso. Conservali come conservi le password.
Accesso con OpenID Connect
TsgcHTTP_OIDC_Client autentica gli utenti con qualsiasi provider OpenID Connect. Legge il documento di discovery del provider, così la configurazione è un URL dell'issuer e un client ID invece di un elenco di endpoint copiati a mano. Convalida l'ID token ricevuto, e le stesse chiavi di firma convalidano i bearer token che raggiungono la tua API REST, inclusi i token delle applicazioni multi-tenant di Entra ID, dove ogni tenant di cliente firma con il proprio issuer.
OAuth2 per la posta di Microsoft 365 e Gmail
Microsoft 365 e Gmail richiedono OAuth2, non una password, da SMTP, IMAP e POP3. TsgcMailOAuth2 ottiene il token di accesso, lo rinnova e costruisce la stringa XOAUTH2 con cui la tua sessione SMTP, IMAP o POP3 effettua l'accesso. Scegli il provider e i protocolli, fornisci il tuo client ID, e conserva il refresh token quando scatta OnTokensChanged. Un servizio o un'applicazione console senza browser può usare invece il flusso device code.
Prova le demo
Ogni componente ha una demo eseguibile in Demos\26.Authentication:
01.Passkeys, accesso senza nome utente e compilazione automatica nel browser.02.TOTP, registrazione con codice QR, verifica e codici di recupero.03.SAML_ServiceProvider, single sign-on con il tuo identity provider.04.OpenID_Connect, accesso e convalida del token.05.LDAP_ActiveDirectory, accesso e appartenenza ai gruppi.06.Mail_OAuth2, invio di posta da Microsoft 365 o Gmail con OAuth2.
Documentazione
- Passkeys
- TsgcSAMLServiceProvider
- TsgcLDAPClient
- TsgcTOTPAuthenticator
- TsgcHTTP_OIDC_Client
- TsgcMailOAuth2
Dove trovarli
I componenti sono inclusi nelle edizioni Enterprise e All-Access di sgcWebSockets, per Delphi, C++ Builder e .NET. Se ti serve solo l'autenticazione, il pacchetto sgcAuth li offre da soli. Sono additivi: nulla cambia in un'applicazione esistente finché non ne trascini uno su un form.
Continua a leggere
Guardalo in video
C'è un breve video, “Delphi login with passkeys, SAML SSO, Active Directory LDAP and TOTP 2FA”, sul canale eSeGeCe.
Domande, feedback o aiuto per integrarlo nella tua pagina di login? Contattaci. Riceverai una risposta dalle persone che hanno scritto il codice.
