Logowanie w Delphi z Passkeys, SAML SSO, LDAP i TOTP 2FA

· Komponenty
Logowanie w Delphi z Passkeys, SAML SSO, LDAP i TOTP 2FA

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:

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:

Dokumentacja

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.