Passkeys, SAML SSO, LDAP ve TOTP 2FA ile Delphi'de Giriş

· Bileşenler
Passkeys, SAML SSO, LDAP ve TOTP 2FA ile Delphi'de Giriş

Giriş ekranı, her müşterinin hakkında bir fikri olduğu tek iş uygulaması parçasıdır. Entra ID hesabımızla giriş yapabilir miyiz? Passkey'leri destekliyor mu? Denetçilerimiz iki faktörlü doğrulama istiyor. Kullanıcılarımız Active Directory'de, neden başka bir parolaya ihtiyaçları var? Ve uygulamanızın gönderdiği posta, Microsoft 365'in SMTP ayarlarındaki parolayı reddettiği gün çalışmayı durdurdu.

Bu soruların her biri kendi özelliğine, kendi XML'ine veya ASN.1'ine ve neredeyse doğru olmanın kendine özgü yollarına sahip bir protokoldür. Yeni kurumsal kimlik doğrulama bileşenleri bunları Delphi bileşenleri olarak yanıtlar. sgcWebSockets'in Enterprise ve All-Access sürümlerinde ve sgcAuth paketinde yer alırlar, aynı bileşenler sgcWebSockets .NET'in de bir parçasıdır.

Kullanıcıların Beklediği Şekilde Passkey'ler

WebAuthn sunucusu artık insanların passkey'lerden bahsederken gerçekte ne kastettiğini kapsıyor:

SAML Tekli Oturum Açma

Büyük müşteriler, personelinin uygulamanızda bir hesabının olmasını istemez. Şirketin zaten kullandığı kimlik sağlayıcısıyla giriş yapmak isterler. TsgcSAMLServiceProvider, uygulamanızı Entra ID, Okta, AD FS, Google Workspace ve Keycloak için bir SAML 2.0 hizmet sağlayıcısı yapar. Kimlik sağlayıcı girişi gerçekleştirir, uygulamanız bir doğrulama (assertion) alır, ve bu doğrulamanın imzası, siz bir kullanıcı adı görmeden önce doğrulanır.

Active Directory ve LDAP Girişi

Şirket ağı içinde çalışan uygulama için kullanıcıların zaten bir parolası vardır: Windows parolaları. TsgcLDAPClient, bir kullanıcı adını ve parolayı Active Directory'ye veya herhangi bir LDAP dizinine karşı, parola ağı asla açık metin olarak geçmeyecek şekilde LDAPS veya StartTLS üzerinden denetler. Security özelliğini ldapsecLDAPS veya ldapsecStartTLS olarak ayarlayın ve Authenticate metodunu çağırın.

Kullanıcının kim olduğunu bilmek sorunun yalnızca yarısını yanıtlar. GetUserGroups, iç içe geçmiş gruplar dahil, hesabın ait olduğu grupları döndürür, böylece “bu kullanıcı bir fatura onaylayıcısı mı” sorusu, kendiniz yazıp hata ayıklamanız gereken özyinelemeli bir arama yerine tek bir çağrı olur.

Bir Kimlik Doğrulayıcı Uygulamasından İki Faktörlü Kodlar

TsgcTOTPAuthenticator, Google Authenticator, Microsoft Authenticator ve diğer tüm TOTP uygulamalarının altı haneli kodlarını üretir ve denetler. Kayıt işlemi bir gizli anahtar ve QR kodu olarak gösterdiğiniz bir URI'dir. Giriş tek bir çağrıdır:

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;

Bu aşırı yükleme, tekrar oynatma (replay) korumasıdır: daha önce kabul edilmiş bir kod, kendi otuz saniyesi içinde bile olsa reddedilir, böylece birinin omzunun üzerinden okuduğu bir kod kullanıldıktan sonra hiçbir işe yaramaz. Telefonun kaybolduğu gün için GenerateRecoveryCodes, tek kullanımlık kurtarma kodlarıyla bir liste doldurur. Onları parolaları sakladığınız gibi saklayın.

OpenID Connect ile Giriş

TsgcHTTP_OIDC_Client, kullanıcıları herhangi bir OpenID Connect sağlayıcısıyla oturum açtırır. Sağlayıcının keşif belgesini okur, böylece yapılandırma, elle kopyalanmış bir uç nokta listesi yerine bir yayımcı URL'si ve bir istemci kimliğidir. Aldığı ID token'ını doğrular, ve aynı imza anahtarları, her müşteri kiracısının kendi yayımcısıyla imzaladığı Entra ID çok kiracılı uygulamalarından gelenler dahil, kendi REST API'nize ulaşan taşıyıcı (bearer) token'ları doğrular.

Microsoft 365 ve Gmail Postası için OAuth2

Microsoft 365 ve Gmail, SMTP, IMAP ve POP3'ten bir parola değil, OAuth2 bekler. TsgcMailOAuth2, erişim belirtecini alır, yeniler, ve SMTP, IMAP veya POP3 oturumunuzun giriş yapmak için kullandığı XOAUTH2 dizesini oluşturur. Sağlayıcıyı ve protokolleri seçin, istemci kimliğinizi verin, ve OnTokensChanged tetiklendiğinde yenileme belirtecini saklayın. Tarayıcısı olmayan bir hizmet veya konsol uygulaması bunun yerine cihaz kodu akışını kullanabilir.

Demoları Deneyin

Her bileşenin Demos\26.Authentication içinde çalıştırılabilir bir demosu vardır:

Belgeler

Nereden Edinilir

Bileşenler, Delphi, C++ Builder ve .NET için sgcWebSockets'in Enterprise ve All-Access sürümlerine dahildir. Yalnızca kimlik doğrulamaya ihtiyacınız varsa, sgcAuth paketi bunları tek başına sunar. Katma değerlidirler: bir forma birini sürükleyip bırakana kadar mevcut bir uygulamada hiçbir şey değişmez.

Sırada Ne Var

İzleyin

eSeGeCe kanalında, “Delphi login with passkeys, SAML SSO, Active Directory LDAP and TOTP 2FA” başlıklı kısa bir video bulunuyor.

Sorularınız, geri bildirimleriniz veya bunu giriş sayfanıza entegre etme konusunda yardıma mı ihtiyacınız var? Bize ulaşın. Kodu yazan kişilerden bir yanıt alacaksınız.