Ekran logowania to jedyna część aplikacji biznesowej, na temat której każdy klient ma zdanie. Czy możemy zalogować się kontem Entra ID? Czy obsługuje passkeys? Nasi audytorzy chcą uwierzytelniania dwuskładnikowego. Nasi użytkownicy są w Active Directory, po co im kolejne hasło? A poczta wysyłana przez twoją aplikację przestała działać w dniu, gdy Microsoft 365 odrzucił hasło w ustawieniach SMTP.
Każde z tych pytań to osobny protokół, z własną specyfikacją, własnym XML lub ASN.1, i własnymi sposobami bycia niemal poprawnym. Nowe komponenty uwierzytelniania dla przedsiębiorstw odpowiadają na nie jako komponenty Delphi. Są dostępne w edycjach Enterprise i All-Access sgcWebSockets oraz w pakiecie sgcAuth, a te same komponenty są też częścią sgcWebSockets .NET.
Passkeys, tak jak oczekują ich użytkownicy
Serwer WebAuthn obejmuje teraz to, co ludzie naprawdę mają na myśli, mówiąc o passkeys:
- Logowanie bez nazwy użytkownika. Użytkownik naciska jeden przycisk, przeglądarka proponuje passkeys zapisane dla twojej witryny, a konto jest identyfikowane przez poświadczenie. Nic do wpisania.
- Autouzupełnianie. Passkeys pojawiają się na własnej liście podpowiedzi przeglądarki w polu nazwy użytkownika, obok zapisanych haseł, dzięki czemu strona logowania może zaoferować oba rozwiązania, gdy użytkownicy przechodzą na nowe.
- Kilka passkeys na użytkownika. Jeden na telefonie, jeden na laptopie, jeden klucz sprzętowy w szufladzie na dzień, gdy oba zginą.
- Wykrywanie zsynchronizowanych passkeys. Serwer rozpoznaje, czy passkey jest kopiowany i synchronizowany przez platformę, czy przypisany do jednego urządzenia, dzięki czemu twoja polityka może traktować je inaczej.
- Twoja własna baza danych. Passkeys znajdują się obok twojej tabeli użytkowników, a nie w pliku zarządzanym przez komponent.
Jednokrotne logowanie SAML
Duzi klienci nie chcą, aby ich pracownicy mieli konto w twojej aplikacji. Chcą logować się za pomocą dostawcy tożsamości, którego firma już używa. TsgcSAMLServiceProvider zmienia twoją aplikację w dostawcę usług SAML 2.0 dla Entra ID, Okta, AD FS, Google Workspace i Keycloak. Dostawca tożsamości obsługuje logowanie, twoja aplikacja otrzymuje asercję, a podpis tej asercji jest weryfikowany, zanim w ogóle zobaczysz nazwę użytkownika.
Logowanie do Active Directory i LDAP
Dla aplikacji działającej w sieci firmowej użytkownicy mają już hasło: to od Windows. TsgcLDAPClient sprawdza nazwę użytkownika i hasło względem Active Directory lub dowolnego katalogu LDAP, przez LDAPS lub StartTLS, dzięki czemu hasło nigdy nie przechodzi przez sieć jawnym tekstem. Ustaw Security na ldapsecLDAPS lub ldapsecStartTLS i wywołaj Authenticate.
Wiedza, kim jest użytkownik, odpowiada tylko na połowę pytania. GetUserGroups zwraca grupy, do których należy konto, łącznie z grupami zagnieżdżonymi, dzięki czemu pytanie “czy ten użytkownik jest osobą zatwierdzającą faktury” to jedno wywołanie zamiast rekurencyjnego wyszukiwania, które musisz napisać i debugować samodzielnie.
Kody dwuskładnikowe z aplikacji uwierzytelniającej
TsgcTOTPAuthenticator generuje i sprawdza sześciocyfrowe kody z Google Authenticator, Microsoft Authenticator i każdej innej aplikacji TOTP. Rejestracja to sekret i URI, które pokazujesz jako kod QR. Logowanie to jedno wywołanie:
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;
Ta wersja przeciążona to ochrona przed powtórzeniem: kod, który już został zaakceptowany, jest odrzucany, nawet w ciągu swoich trzydziestu sekund, dzięki czemu kod odczytany komuś zza pleców nie jest nic wart po użyciu. Na dzień, gdy telefon zaginie, GenerateRecoveryCodes wypełnia listę jednorazowymi kodami odzyskiwania. Przechowuj je tak, jak przechowujesz hasła.
Logowanie z OpenID Connect
TsgcHTTP_OIDC_Client loguje użytkowników u dowolnego dostawcy OpenID Connect. Odczytuje dokument odkrywania dostawcy, dzięki czemu konfiguracja to adres URL wydawcy i identyfikator klienta, a nie lista punktów końcowych skopiowana ręcznie. Weryfikuje otrzymany token ID, a te same klucze podpisu weryfikują tokeny nośnika trafiające do twojego własnego API REST, w tym tokeny z aplikacji wielodostępnych Entra ID, gdzie każdy najemca klienta podpisuje własnym wydawcą.
OAuth2 dla poczty Microsoft 365 i Gmail
Microsoft 365 i Gmail oczekują OAuth2, a nie hasła, od SMTP, IMAP i POP3. TsgcMailOAuth2 pobiera token dostępu, odświeża go i buduje ciąg XOAUTH2, którym loguje się twoja sesja SMTP, IMAP lub POP3. Wybierz dostawcę i protokoły, podaj identyfikator klienta i zachowaj token odświeżania, gdy uruchomi się OnTokensChanged. Usługa lub aplikacja konsolowa bez przeglądarki może zamiast tego użyć przepływu kodu urządzenia.
Wypróbuj demonstracje
Każdy komponent ma uruchamialną demonstrację w Demos\26.Authentication:
01.Passkeys, logowanie bez nazwy użytkownika i autouzupełnianie w przeglądarce.02.TOTP, rejestracja z kodem QR, weryfikacja i kody odzyskiwania.03.SAML_ServiceProvider, jednokrotne logowanie u twojego dostawcy tożsamości.04.OpenID_Connect, logowanie i weryfikacja tokenów.05.LDAP_ActiveDirectory, logowanie i przynależność do grup.06.Mail_OAuth2, wysyłanie poczty z Microsoft 365 lub Gmail za pomocą OAuth2.
Dokumentacja
- Passkeys
- TsgcSAMLServiceProvider
- TsgcLDAPClient
- TsgcTOTPAuthenticator
- TsgcHTTP_OIDC_Client
- TsgcMailOAuth2
Gdzie je zdobyć
Komponenty są dostępne w edycjach Enterprise i All-Access sgcWebSockets, dla Delphi, C++ Builder i .NET. Jeśli potrzebujesz tylko uwierzytelniania, pakiet sgcAuth oferuje je osobno. Są addytywne: w istniejącej aplikacji nic się nie zmienia, dopóki nie umieścisz jednego z nich na formularzu.
Czytaj dalej
Zobacz wideo
Jest krótki film, “Delphi login with passkeys, SAML SSO, Active Directory LDAP and TOTP 2FA”, na kanale eSeGeCe.
Masz pytania, uwagi lub potrzebujesz pomocy przy wdrożeniu tego na stronie logowania? Skontaktuj się z nami. Otrzymasz odpowiedź od osób, które napisały ten kod.
