sgcAuth: komponenty OAuth2, JWT i WebAuthn dla Delphi i C++ Builder
Dwa komponenty klienckie wnoszą tokenową stronę nowoczesnego uwierzytelniania do twojej aplikacji. TsgcHTTP_OAuth2_Client obsługuje przepływy Authorization Code, PKCE, Client Credentials, Resource Owner Password i Device Code wobec dowolnego dostawcy OAuth2/OIDC. TsgcHTTP_JWT_Client buduje, podpisuje i weryfikuje tokeny JSON Web Token, samodzielnie albo jako źródło tokenu Bearer dla twoich klientów WebSocket i HTTP. Pięć kolejnych komponentów dodaje drugi składnik TOTP, logowanie przez LDAP i Active Directory, jednokrotne logowanie SAML, OpenID Connect oraz OAuth2 dla poczty. sgcAuth jest samodzielny, zawiera środowisko uruchomieniowe sgcWebSockets Core, na którym zbudowani są oba klienci.
Środowisko w zestawiesgcWebSockets CoreŚrodowisko HTTP, TLS i JSON pod obydwoma klientami
OAuth2TsgcHTTP_OAuth2_Client
JWTTsgcHTTP_JWT_Client
ZOBACZ, JAK TO DZIAŁA
Zobacz sgcAuth w dwie minuty
OAuth2, JWT i passkey WebAuthn w Delphi i C++Builder, po stronie klienta i w Twoim własnym serwerze.
7KomponentówJedna strona na palecie komponentów
9Wdrożonych RFCOAuth2, PKCE, DPoP, Device Code, JWT/JWS/JWE i więcej
5PlatformWindows, macOS, Linux, iOS i Android
100%Kod źródłowy w zestawieOba klienty oraz dołączone środowisko uruchomieniowe Core
12Miesięcy aktualizacjiKażde wydanie opublikowane w czasie aktywności twojej licencji
ZANIM KUPISZ
Trzy rzeczy, które warto wiedzieć najpierw
Czego sgcAuth od ciebie wymaga, czy już posiadasz te komponenty, i czego dodatkowo potrzebuje WebAuthn. Wszystkie trzy odpowiedzi są krótkie.
sgcAuth jest samowystarczalny
Samodzielnie, środowisko uruchomieniowe sgcWebSockets Core jest w zestawie: stos klienta HTTP/TLS, przez który oba komponenty wysyłają swoje żądania tokenów metodą POST, oraz mechanizmy JSON, które parsują odpowiedzi. Jedno SKU, jeden instalator.
Pełny kod źródłowy jest dostarczany z każdą licencją, więc oba klienty i środowisko uruchomieniowe pod nimi prześledzisz krok po kroku we własnym debugerze, zamiast oglądać je znikające w pliku binarnym.
Nakładanie się edycji
Masz to już w swojej edycji sgcWebSockets?
Zarówno klient OAuth2, jak i klient JWT są dostarczane wewnątrz sgcWebSockets od edycji Standard wzwyż, więc jeśli posiadasz jakąkolwiek edycję sgcWebSockets, masz już oba komponenty. Komponenty WebAuthn, TOTP, LDAP, SAML, OpenID Connect i Mail OAuth2 są dostarczane w edycji Enterprise. All-Access zawiera wszystko.
sgcAuth istnieje dla odwrotnego przypadku: chcesz mieć obsługę klienta OAuth2 i JWT w Delphi lub C++ Builder bez licencjonowania pełnej edycji sgcWebSockets. Sprawdź, co obejmuje twoja edycja, zanim kupisz.
Wymagany dodatek
WebAuthn wymaga sgcCustomIndy
Logowanie bezhasłowe z WebAuthn i kluczami passkey jest obsługiwane przez TsgcWSAPIServer_WebAuthn, komponent sgcWebSockets Enterprise/All-Access zbudowany na zmodyfikowanej bibliotece Indy, którą sgcCustomIndy dostarcza jako dodatek. WebAuthn wymaga dodatku sgcCustomIndy, który jest dodawany automatycznie przy zamawianiu sgcAuth. Komponenty TOTP, LDAP, SAML, OpenID Connect i Mail OAuth2 są odblokowywane przez ten sam dodatek.
Posiadasz już licencję sgcCustomIndy? Usuń automatycznie dodaną pozycję z koszyka przed finalizacją zamówienia, w obu przypadkach bez dodatkowych opłat.
CO JEST W ZESTAWIE
Klienty tokenów, drugi składnik i jednokrotne logowanie
Każdy z nich to komponent niewizualny, który umieszczasz na formularzu albo tworzysz w kodzie, zadeklarowany w module sgc i zarejestrowany na stronie palety SGC Auth. Ustaw dane dostawcy, podłącz zdarzenia, a następnie wywołaj Start. Komponenty TOTP, LDAP, SAML, OpenID Connect i Mail OAuth2 są odblokowywane razem z sgcCustomIndy, tak jak WebAuthn.
OAuth21 komponent
Pięć typów przyznania uprawnień, jeden komponent
TsgcHTTP_OAuth2_Client steruje OAuth2Options.GrantType poprzez auth2Code dla zaufanych aplikacji po stronie serwera, auth2CodePKCE dla aplikacji natywnych, mobilnych i jednostronicowych, auth2ClientCredentials dla demonów i kont usług, auth2ResourceOwnerPassword, oraz auth2DeviceCode (RFC 8628) dla smart TV, kiosków i innych urządzeń o ograniczonych możliwościach wprowadzania danych. Wskaż w AuthorizationServerOptions punkty końcowe dostawcy do autoryzacji, tokenu, unieważnienia i introspekcji, a komponent zajmie się resztą: gdy Active/Start uruchamia przepływ Authorization Code, otwiera przeglądarkę systemową i uruchamia mały lokalny serwer HTTP z LocalServerOptions, aby przechwycić przekierowanie, wymieniając kod na token przez zwykłe HTTPS poprzez HTTPClientOptions. Refresh, Revoke i Introspect obejmują cykl życia tokenu od tego momentu, a DPoPOptions wraz z GenerateDPoPKeyPair dodają dowód posiadania DPoP (RFC 9449) dla dostawców, którzy go wymagają. Gotowe ustawienia wstępne Google i Microsoft konfigurują za ciebie typowe punkty końcowe i zakresy.
TsgcHTTP_JWT_Client udostępnia wszystko, czego wymaga RFC 7519, poprzez JWTOptions: nagłówek JOSE Header (alg, typ, kid), zarejestrowane roszczenia Payload (iss, sub, aud, exp, nbf, iat, jti, a także własne roszczenia przez AddKeyValue), oraz materiał kluczowy pod Algorithms dla HMAC (HS.Secret), RSA (RS.PrivateKey) i ECDSA (ES.PrivateKey). Wywołaj Sign, aby od razu otrzymać token w postaci compact serialization, przydatne dla usług bez wbudowanego klienta HTTP czy WebSocket, albo ustaw RefreshTokenAfter i pozwól komponentowi automatycznie odświeżać iat/exp oraz podpisywać token na nowo. Ten sam komponent podłącza się bezpośrednio do Authentication.Token.JWT na TsgcWebSocketClient, TsgcHTTP1Client i TsgcHTTP2Client, więc każde żądanie wychodzące niesie świeży token Bearer bez ręcznej ingerencji w nagłówek.
Kody drugiego składnika, każdy zaakceptowany tylko raz
TsgcTOTPAuthenticator dodaje do logowania sześciocyfrowe kody z dowolnej aplikacji authenticator, w tym Google Authenticator i Microsoft Authenticator. GenerateSecret tworzy losowy sekret Base32, a GetProvisioningURI buduje URI otpauth://, które renderujesz jako kod QR podczas rejestracji. VerifyCode sprawdza to, co wpisuje użytkownik, z konfigurowalnym Window dla przesunięcia zegara, a jego przeciążenie z ochroną przed powtórzeniem nigdy nie akceptuje tego samego kroku czasowego dwukrotnie. GenerateHOTP i VerifyHOTP obsługują tokeny sprzętowe oparte na liczniku, GenerateRecoveryCodes wypełnia listę jednorazowych kodów awaryjnych, a Algorithm, Digits i Period wybierają HMAC-SHA1, HMAC-SHA256 lub HMAC-SHA512 z kodami od 6 do 8 cyfr.
TsgcLDAPClient to klient LDAP v3, który sprawdza nazwy użytkowników i hasła względem Active Directory lub dowolnego innego katalogu LDAP. Security wybiera LDAPS na porcie 636 lub StartTLS na porcie 389, a odrzucone StartTLS zamyka połączenie zamiast wracać do tekstu jawnego. AuthenticationMode zamienia to, co wpisał użytkownik, na nazwę bindowania: jako UPN, nazwę DOMENA\użytkownik, pełny DN, albo bind serwisowy z wyszukiwaniem przez UserSearchFilter, a Authenticate wykonuje całą weryfikację w jednym wywołaniu. GetUserGroups zwraca bezpośrednią lub zagnieżdżoną przynależność do grup przez LDAP_MATCHING_RULE_IN_CHAIN, Search automatycznie stronicuje duże zbiory wyników, a każda metoda publiczna jest serializowana, więc jedna instancja może obsłużyć wielowątkowy serwer.
Firmowe jednokrotne logowanie dla Twojej aplikacji webowej
TsgcSAMLServiceProvider zamienia Twoją aplikację webową Delphi w service providera SAML 2.0 dla Microsoft Entra ID, Okta, AD FS, Google Workspace, Keycloak i innych dostawców tożsamości. GetMetadata tworzy metadane, które rejestrujesz u IdP, a LoadIdPMetadata odczytuje metadane IdP. GetAuthnRequestRedirectURL i GetAuthnRequestPostForm wysyłają przeglądarkę do logowania przez binding Redirect lub POST, a ProcessResponse waliduje to, co wraca: podpis wyłącznie względem zaufanych IdPCertificates, dokładnie jedną asercję, by udaremnić signature wrapping, a następnie wydawcę, odbiorcę, miejsce docelowe, InResponseTo, okno ważności i cache chroniący przed powtórzeniem. Wynik trafia jako TsgcSAMLResult z NameID, indeksem sesji i atrybutami.
TsgcHTTP_OIDC_Client rozszerza klienta OAuth2 o OpenID Connect. Ustaw OIDCOptions.Issuer, a Discover wypełni endpointy i JWKSURI na podstawie konfiguracji dostawcy. Start uruchamia logowanie w przeglądarce z PKCE i świeżym nonce, a następnie waliduje podpis tokenu ID, wydawcę, odbiorcę, wygaśnięcie i nonce, akceptując wyłącznie RS256, RS384, RS512, ES256 i ES384, nigdy none ani algorytmów HS. OnOIDCIDToken dostarcza roszczenia, GetUserInfo zwraca profil, a bezpieczny wątkowo cache kluczy nadąża za rotacją kluczy bez restartu. Po stronie serwera sgcOIDC_ValidateIDToken sprawdza tokeny bearer otrzymywane przez Twoje API REST lub serwer WebSocket względem tego samego cache.
TsgcMailOAuth2 uzyskuje tokeny, których Microsoft 365 i Gmail oczekują dla poczty. Wybierz Provider (mopMicrosoft365, mopGmail lub mopCustom) oraz używane Protocols, a komponent zażąda odpowiednich zakresów. Flow uruchamia logowanie w przeglądarce z PKCE i przekierowaniem loopback, albo przepływ z kodem urządzenia dla usług i konsol. Refresh odświeża token dostępu, a OnTokensChanged uruchamia się za każdym razem, więc możesz zapisać nowy token odświeżania. GetXOAuth2 i GetOAuthBearer zwracają ciągi SASL dla AUTH XOAUTH2 i AUTH OAUTHBEARER, gotowe dla Indy TIdSMTP, TIdIMAP4 i TIdPOP3 lub dowolnej innej biblioteki pocztowej.
TsgcMailOAuth2RFC 7628 · XOAUTH2 · Microsoft 365 · Gmail
PRZYPADKI UŻYCIA
Przepływy uwierzytelniania z kodu Delphi
Oba komponenty to zwyczajne komponenty niewizualne, więc pasują do tego, czym już jest twoja aplikacja: desktopowej aplikacji VCL, usługi Windows albo demona Linux. Oto wzorce, które budują klienci, każdy powiązany z właściwością lub metodą, która go napędza.
SI
Logowanie przez Google lub Microsoftauth2CodePKCE
Gotowe ustawienia wstępne Google i Microsoft konfigurują za ciebie punkty końcowe autoryzacji i tokenu oraz zakresy.
M2
Dostęp do API serwer-serwerauth2ClientCredentials
Zadania w tle i konta usług uwierzytelniają się do API bez udziału użytkownika.
TV
Smart TV, kioski i urządzenia IoTauth2DeviceCode
Urządzenie wyświetla krótki kod, a użytkownik kończy logowanie na swoim telefonie lub laptopie.
RF
Długie sesje bez ponownego logowaniaRefresh
Wymień token odświeżający na nowy token dostępu w tle, bez potrzeby przekazywania do przeglądarki.
WS
Uwierzytelnij własne API WebSocket i HTTPAuthentication.Token.JWT
Klient JWT automatycznie podpisuje tokeny Bearer dla TsgcWebSocketClient, TsgcHTTP1Client i TsgcHTTP2Client.
SG
Samodzielne podpisywanie tokenówSign
Zbuduj i podpisz ciąg JWT dla dowolnej bazy kodu, bez potrzeby komponentu WebSocket czy HTTP.
JAK TO DZIAŁA
Przekazanie do przeglądarki, podpis i dołączone środowisko uruchomieniowe
OAuth2 i JWT rozwiązują różne problemy: jeden negocjuje token ze zdalnym serwerem, drugi podpisuje go lokalnie, i właśnie to jest sens ich połączenia w jednym pakiecie: sgcAuth ukrywa tę różnicę za tymi samymi konwencjami komponentów, a dołączone środowisko uruchomieniowe sgcWebSockets Core zajmuje się całą infrastrukturą pod spodem.
OAuth2 to przekazanie do przeglądarki, a potem zwykłe HTTPS
Start otwiera przeglądarkę systemową (albo, dla Device Code, przekazuje ci kod użytkownika do wyświetlenia), a lokalny nasłuch HTTP z LocalServerOptions przechwytuje przekierowanie autoryzacyjne. Wymiana na token dostępu to zwykłe żądanie POST przez HTTPS, wysyłane poprzez HTTPClientOptions, na stosie klienta HTTP środowiska uruchomieniowego Core.
JWT to podpisywanie, nie sieć
TsgcHTTP_JWT_Client nigdy nie otwiera gniazda. JWTOptions konfiguruje nagłówek, ładunek i materiał kluczowy, a Sign zwraca token w postaci compact serialization, HMAC, RSA lub ECDSA, gotowy do dołączenia do dowolnego żądania wysyłanego przez twój kod.
Środowisko uruchomieniowe Core jest w zestawie
Samodzielnie, środowisko uruchomieniowe sgcWebSockets Core jest w zestawie. Dostarcza stos klienta HTTP/TLS, przez który oba komponenty wysyłają żądania POST, oraz parser JSON, który odczytuje odpowiedzi, a jego pełne źródło jest częścią pakietu, tak jak wszystko inne.
WebAuthn to trzeci element, przez sgcCustomIndy
Logowanie bezhasłowe jest obsługiwane przez TsgcWSAPIServer_WebAuthn, komponent serwerowy sgcWebSockets Enterprise/All-Access, który potrzebuje zmodyfikowanej biblioteki Indy dostarczanej przez sgcCustomIndy. Zamówienie sgcAuth automatycznie dodaje sgcCustomIndy do twojego koszyka.
SZYBKI START
Pobierz token, podpisz token
Oba komponenty mają ten sam kształt: skonfiguruj opcje, a następnie wywołaj metodę. Kompilują się w Delphi od 7 do 13 oraz w C++ Builder, a te same właściwości są wystawione w .NET.
uses
sgcHTTP, sgcHTTP_OAuth_Types, sgcHTTP_JWT_Types;
var
OAuth2: TsgcHTTP_OAuth2_Client;
JWT: TsgcHTTP_JWT_Client;
begin// OAuth2: Authorization Code Grant with PKCE
OAuth2 := TsgcHTTP_OAuth2_Client.Create(nil);
OAuth2.OAuth2Options.GrantType := auth2CodePKCE;
OAuth2.OAuth2Options.ClientId := 'your-client-id';
OAuth2.AuthorizationServerOptions.AuthURL := 'https://provider.com/oauth2/authorize';
OAuth2.AuthorizationServerOptions.TokenURL := 'https://provider.com/oauth2/token';
OAuth2.AuthorizationServerOptions.Scope.Clear;
OAuth2.AuthorizationServerOptions.Scope.Add('openid');
OAuth2.AuthorizationServerOptions.Scope.Add('profile');
OAuth2.LocalServerOptions.IP := '127.0.0.1';
OAuth2.LocalServerOptions.Port := 8080;
OAuth2.OnAfterAccessToken := OAuth2AccessToken;
OAuth2.Start; // opens the browser; the redirect lands on the local server// JWT: sign a token for your own API
JWT := TsgcHTTP_JWT_Client.Create(nil);
JWT.JWTOptions.Header.alg := jwtHS256;
JWT.JWTOptions.Algorithms.HS.Secret := '79F66F1E-E998-436B-8A0A-3E5DEFA4FD9E';
JWT.JWTOptions.Payload.iss := 'your-service';
JWT.JWTOptions.Payload.sub := '1234567890';
JWT.JWTOptions.Payload.iat := DateTimeToUnix(Now);
ShowMessage(JWT.Sign);
end;
procedure TForm1.OAuth2AccessToken(Sender: TObject; const Access_Token,
Token_Type, Expires_In, Refresh_Token, Scope, RawParams: String;
var Handled: Boolean);
begin
Memo1.Lines.Add('Access token received.');
end;
Ten sam komponent JWT dołącza się bezpośrednio do klienta WebSocket lub HTTP: ustaw Client.Authentication.Token.Enabled := True oraz Client.Authentication.Token.JWT := JWT, a każde żądanie wychodzi z aktualnym tokenem Bearer.
// include: sgcHTTP.hpp, sgcHTTP_OAuth_Types.hpp, sgcHTTP_JWT_Types.hpp// OAuth2: Authorization Code Grant with PKCE
TsgcHTTP_OAuth2_Client *OAuth2 = new TsgcHTTP_OAuth2_Client(this);
OAuth2->OAuth2Options->GrantType = auth2CodePKCE;
OAuth2->OAuth2Options->ClientId = "your-client-id";
OAuth2->AuthorizationServerOptions->AuthURL = "https://provider.com/oauth2/authorize";
OAuth2->AuthorizationServerOptions->TokenURL = "https://provider.com/oauth2/token";
OAuth2->AuthorizationServerOptions->Scope->Clear();
OAuth2->AuthorizationServerOptions->Scope->Add("openid");
OAuth2->AuthorizationServerOptions->Scope->Add("profile");
OAuth2->LocalServerOptions->IP = "127.0.0.1";
OAuth2->LocalServerOptions->Port = 8080;
OAuth2->OnAfterAccessToken = OAuth2AccessToken;
OAuth2->Start(); // opens the browser; the redirect lands on the local server// JWT: sign a token for your own API
TsgcHTTP_JWT_Client *JWT = new TsgcHTTP_JWT_Client(this);
JWT->JWTOptions->Header->alg = jwtHS256;
JWT->JWTOptions->Algorithms->HS->Secret = "79F66F1E-E998-436B-8A0A-3E5DEFA4FD9E";
JWT->JWTOptions->Payload->iss = "your-service";
JWT->JWTOptions->Payload->sub = "1234567890";
JWT->JWTOptions->Payload->iat = DateTimeToUnix(Now());
ShowMessage(JWT->Sign());
void __fastcall TForm1::OAuth2AccessToken(TObject *Sender,
const UnicodeString Access_Token, const UnicodeString Token_Type,
const UnicodeString Expires_In, const UnicodeString Refresh_Token,
const UnicodeString Scope, const UnicodeString RawParams, bool &Handled)
{
Memo1->Lines->Add("Access token received.");
}
Ten sam komponent JWT dołącza się bezpośrednio do klienta WebSocket lub HTTP: ustaw Client->Authentication->Token->Enabled = true oraz Client->Authentication->Token->JWT = JWT, a każde żądanie wychodzi z aktualnym tokenem Bearer.
PLATFORMY
Czyste HTTPS i podpisywanie, bez natywnej biblioteki
Żaden z komponentów nie zależy od niczego poza stosem klienta HTTP środowiska uruchomieniowego Core i prymitywami kryptograficznymi platformy, więc oba kompilują się i działają wszędzie tam, gdzie Delphi.
sgcAuth jest licencjonowany samodzielnie, już od €149 dla jednego programisty. Wszystkie licencje obejmują pełny kod źródłowy, 1 rok aktualizacji oraz od 50% do 70% rabatu na odnowienie: 50% przy odnowieniu jednego pakietu, 60% przy dwóch, 70% przy trzech lub więcej. sgcAI, sgcMQ, sgcSocial, sgcCustomIndy, sgcAuth, sgcHTTP i sgcREST liczą się każdy jako jeden pakiet.
Zamówienie zawiera dwie pozycje: uprawnienie do środowiska uruchomieniowego sgcWebSockets Core, naliczane jako zero, oraz sam pakiet sgcAuth. sgcCustomIndy jest dodawany automatycznie dla WebAuthn, usuń go, jeśli już posiadasz licencję. Pełne szczegóły cennika.
3,000+Programistów
20+Lat
761+Komponentów
30+Integracji API
5Platform
30-dniowa gwarancja zwrotu pieniędzyNie jesteś zadowolony? Poproś o pełny zwrot pieniędzy w ciągu 30 dni od zakupu. Zobacz politykę zwrotów
Wdrażaj uwierzytelnianie, nie bibliotekę tokenów
OAuth2 i JWT z natywnego kodu Delphi i C++ Builder, ze środowiskiem uruchomieniowym w zestawie i pełnym kodem źródłowym w pakiecie. Pobierz już dziś instalator próbny All-Access i umieść oba komponenty na formularzu.
Niestandardowa biblioteka Indy, na której zbudowany jest sgcWebSockets Enterprise, dostępna jako dodatek. Wymagana dla WebAuthn, dodawana automatycznie do zamówień sgcAuth.