Het inlogscherm is het ene onderdeel van een bedrijfsapplicatie waar elke klant een mening over heeft. Kunnen we inloggen met ons Entra ID-account? Ondersteunt het passkeys? Onze auditors willen twee factoren. Onze gebruikers staan in Active Directory, waarom hebben ze dan nog een wachtwoord nodig? En de mail die je applicatie verstuurt, werkte niet meer vanaf de dag dat Microsoft 365 het wachtwoord in de SMTP-instellingen weigerde.
Elk van die vragen is een protocol met zijn eigen specificatie, zijn eigen XML of ASN.1, en zijn eigen manieren om bijna goed te zijn. De nieuwe Enterprise-authenticatiecomponenten beantwoorden ze als Delphi-componenten. Ze zitten in de Enterprise- en All-Access-edities van sgcWebSockets en in het sgcAuth-pakket, en dezelfde componenten maken ook deel uit van sgcWebSockets .NET.
Passkeys, zoals gebruikers ze verwachten
De WebAuthn-server dekt nu wat mensen echt bedoelen als ze het over passkeys hebben:
- Aanmelden zonder gebruikersnaam. De gebruiker drukt op een knop, de browser biedt de passkeys aan die hij voor je site heeft opgeslagen, en het account wordt geïdentificeerd via de credential. Niets om te typen.
- Automatisch invullen. Passkeys verschijnen in de eigen suggestielijst van de browser bij het gebruikersnaamveld, naast opgeslagen wachtwoorden, zodat een inlogpagina beide kan aanbieden terwijl gebruikers overstappen.
- Meerdere passkeys per gebruiker. Een op de telefoon, een op de laptop, een hardware-sleutel in een lade voor de dag dat beide kwijt zijn.
- Detectie van gesynchroniseerde passkeys. De server geeft aan of een passkey door het platform wordt gebackupt en gesynchroniseerd of aan één apparaat gebonden is, zodat je beleid ze anders kan behandelen.
- Je eigen database. Passkeys staan naast je gebruikerstabel, niet in een bestand dat het component beheert.
SAML single sign-on
Grote klanten willen niet dat hun personeel een account in je applicatie heeft. Ze willen inloggen met de identity provider die het bedrijf al gebruikt. TsgcSAMLServiceProvider maakt van je applicatie een SAML 2.0-service provider voor Entra ID, Okta, AD FS, Google Workspace en Keycloak. De identity provider verzorgt het inloggen, je applicatie ontvangt een assertion, en de handtekening op die assertion wordt gevalideerd voordat je ooit een gebruikersnaam ziet.
Aanmelden bij Active Directory en LDAP
Voor de applicatie die binnen het bedrijfsnetwerk draait, hebben gebruikers al een wachtwoord: hun Windows-wachtwoord. TsgcLDAPClient controleert een gebruikersnaam en wachtwoord tegen Active Directory of elke LDAP-directory, via LDAPS of StartTLS zodat het wachtwoord nooit onversleuteld over het netwerk gaat. Zet Security op ldapsecLDAPS of ldapsecStartTLS en roep Authenticate aan.
Weten wie de gebruiker is, beantwoordt maar de helft van de vraag. GetUserGroups geeft de groepen terug waartoe het account behoort, inclusief geneste groepen, zodat “is deze gebruiker een factuurgoedkeurder” één aanroep is in plaats van een recursieve zoekopdracht die je zelf moet schrijven en debuggen.
Tweefactorcodes van een authenticator-app
TsgcTOTPAuthenticator genereert en controleert de zescijferige codes van Google Authenticator, Microsoft Authenticator en elke andere TOTP-app. Registratie is een secret en een URI die je als QR-code toont. Aanmelden is één aanroep:
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;
Die overload is de replay-bescherming: een code die al is geaccepteerd, wordt geweigerd, zelfs binnen zijn eigen dertig seconden, zodat een code die iemand over je schouder heeft gelezen niets meer waard is zodra hij is gebruikt. Voor de dag dat de telefoon kwijt is, vult GenerateRecoveryCodes een lijst met eenmalige herstelcodes. Bewaar ze zoals je wachtwoorden bewaart.
Aanmelden met OpenID Connect
TsgcHTTP_OIDC_Client meldt gebruikers aan bij elke OpenID Connect-provider. Het leest het discoverydocument van de provider, zodat de configuratie bestaat uit een issuer-URL en een client-ID in plaats van een handmatig gekopieerde lijst van endpoints. Het valideert het ontvangen ID-token, en dezelfde ondertekeningssleutels valideren de bearer tokens die je eigen REST-API bereiken, inclusief tokens van multi-tenant Entra ID-applicaties, waar elke klanttenant met zijn eigen issuer ondertekent.
OAuth2 voor Microsoft 365- en Gmail-mail
Microsoft 365 en Gmail verwachten OAuth2, geen wachtwoord, van SMTP, IMAP en POP3. TsgcMailOAuth2 haalt het access token op, vernieuwt het, en bouwt de XOAUTH2-string waarmee je SMTP-, IMAP- of POP3-sessie zich aanmeldt. Kies de provider en de protocollen, geef je client-ID op, en bewaar het refresh token wanneer OnTokensChanged afgaat. Een service of een consoletoepassing zonder browser kan in plaats daarvan de device code flow gebruiken.
Probeer de demo's
Elk component heeft een uitvoerbare demo in Demos\26.Authentication:
01.Passkeys, aanmelden zonder gebruikersnaam en automatisch invullen in de browser.02.TOTP, registratie met QR-code, verificatie en herstelcodes.03.SAML_ServiceProvider, single sign-on met je identity provider.04.OpenID_Connect, aanmelden en tokenvalidatie.05.LDAP_ActiveDirectory, aanmelden en groepslidmaatschap.06.Mail_OAuth2, mail versturen vanuit Microsoft 365 of Gmail met OAuth2.
Documentatie
- Passkeys
- TsgcSAMLServiceProvider
- TsgcLDAPClient
- TsgcTOTPAuthenticator
- TsgcHTTP_OIDC_Client
- TsgcMailOAuth2
Waar je ze kunt krijgen
De componenten zitten in de Enterprise- en All-Access-edities van sgcWebSockets, voor Delphi, C++ Builder en .NET. Als je alleen authenticatie nodig hebt, biedt het sgcAuth-pakket ze los aan. Ze zijn additief: er verandert niets aan een bestaande applicatie totdat je er een op een formulier zet.
Lees verder
Bekijk het
Er is een korte video, “Delphi login with passkeys, SAML SSO, Active Directory LDAP and TOTP 2FA”, op het eSeGeCe-kanaal.
Vragen, feedback of hulp bij het inbouwen in je inlogpagina? Neem contact op. Je krijgt antwoord van de mensen die de code hebben geschreven.
