sgcAuth: OAuth2-, JWT- & WebAuthn-Komponenten für Delphi & C++ Builder
Zwei Client-Komponenten bringen die Token-Seite moderner Authentifizierung in deine Anwendung. TsgcHTTP_OAuth2_Client beherrscht Authorization Code, PKCE, Client Credentials, Resource Owner Password und Device Code gegen jeden OAuth2-/OIDC-Anbieter. TsgcHTTP_JWT_Client erstellt, signiert und verifiziert JSON Web Tokens, allein oder als Bearer-Token-Quelle für deine WebSocket- und HTTP-Clients. Fünf weitere Komponenten ergänzen TOTP-Zweitfaktoren, LDAP- und Active-Directory-Anmeldung, SAML Single Sign-On, OpenID Connect und OAuth2 für E-Mail. sgcAuth ist eigenständig, es bringt die sgcWebSockets Core Runtime mit, auf der beide Clients aufbauen.
Mitgelieferte RuntimesgcWebSockets CoreDie HTTP-, TLS- und JSON-Runtime unter beiden Clients
OAuth2TsgcHTTP_OAuth2_Client
JWTTsgcHTTP_JWT_Client
SIEH ES IN AKTION
sgcAuth in zwei Minuten
OAuth2, JWT und WebAuthn-Passkeys in Delphi und C++Builder, auf dem Client und in deinem eigenen Server.
7KomponentenEine Seite auf der Komponentenpalette
9Implementierte RFCsOAuth2, PKCE, DPoP, Device Code, JWT/JWS/JWE und mehr
5PlattformenWindows, macOS, Linux, iOS und Android
100%Quellcode enthaltenBeide Clients und die mitgelieferte Core Runtime
12Monate UpdatesJede Version, die veröffentlicht wird, während deine Lizenz aktiv ist
VOR DEM KAUF
Drei Dinge, die du vorher wissen solltest
Was sgcAuth von dir braucht, ob du diese Komponenten bereits besitzt, und was WebAuthn zusätzlich benötigt. Alle drei Antworten sind kurz.
sgcAuth ist in sich geschlossen
Eigenständig ist die sgcWebSockets Core Runtime enthalten: der HTTP/TLS-Client-Stack, über den beide Komponenten ihre Token-Anfragen absetzen, und die JSON-Maschinerie, die die Antworten parst. Eine SKU, ein Installer.
Jeder Lizenz liegt der volle Quellcode bei, du kannst also beide Clients und die Runtime darunter in deinem eigenen Debugger durchsteppen, statt sie in einer Binärdatei verschwinden zu sehen.
Edition-Überschneidung
Schon in deiner sgcWebSockets-Edition enthalten?
Sowohl der OAuth2 Client als auch der JWT Client sind ab der Standard-Edition in sgcWebSockets enthalten, wenn du also eine sgcWebSockets-Edition besitzt, hast du beide Komponenten bereits. Die Komponenten WebAuthn, TOTP, LDAP, SAML, OpenID Connect und Mail OAuth2 sind in Enterprise enthalten. All-Access enthält alles.
sgcAuth ist für den umgekehrten Fall gedacht: Du willst OAuth2- und JWT-Client-Unterstützung in Delphi oder C++ Builder, ohne eine vollständige sgcWebSockets-Edition zu lizenzieren. Prüfe vor dem Kauf, was deine Edition bereits abdeckt.
Add-on erforderlich
WebAuthn braucht sgcCustomIndy
Passwortlose Anmeldung mit WebAuthn und Passkeys wird von TsgcWSAPIServer_WebAuthn bedient, einer sgcWebSockets-Enterprise-/All-Access-Komponente, die auf der gepatchten Indy-Bibliothek aufbaut, die sgcCustomIndy als Add-on liefert. WebAuthn erfordert das sgcCustomIndy-Add-on, das beim Bestellen von sgcAuth automatisch hinzugefügt wird. Die Komponenten TOTP, LDAP, SAML, OpenID Connect und Mail OAuth2 werden durch dasselbe Add-on freigeschaltet.
Besitzt du bereits eine sgcCustomIndy-Lizenz? Entferne die automatisch hinzugefügte Position vor dem Checkout aus deinem Warenkorb, in beiden Fällen entstehen keine Zusatzkosten.
WAS ENTHALTEN IST
Token-Clients, Zweitfaktoren und Single Sign-On
Jede davon ist eine nicht-visuelle Komponente, die du auf ein Formular ziehst oder im Code erzeugst, deklariert unter dem Unit-Präfix sgc und registriert auf der Palettenseite SGC Auth. Setze die Anbieter-Details, verdrahte die Ereignisse und rufe dann Start auf. Die Komponenten TOTP, LDAP, SAML, OpenID Connect und Mail OAuth2 werden zusammen mit sgcCustomIndy freigeschaltet, genau wie WebAuthn.
OAuth21 Komponente
Fünf Grant-Typen, eine Komponente
TsgcHTTP_OAuth2_Client steuert OAuth2Options.GrantType über auth2Code für vertrauenswürdige serverseitige Anwendungen, auth2CodePKCE für native, mobile und Single-Page-Anwendungen, auth2ClientCredentials für Daemons und Service-Konten, auth2ResourceOwnerPassword sowie auth2DeviceCode (RFC 8628) für Smart-TVs, Kiosksysteme und andere eingabebeschränkte Geräte. Richte AuthorizationServerOptions auf die Authorize-, Token-, Revocation- und Introspection-Endpunkte des Anbieters aus, und die Komponente erledigt den Rest: Wenn Active/Start den Authorization-Code-Flow ausführt, öffnet sie den Systembrowser und startet einen kleinen lokalen HTTP-Server aus LocalServerOptions, um die Weiterleitung abzufangen, und tauscht den Code über reines HTTPS via HTTPClientOptions gegen ein Token. Refresh, Revoke und Introspect decken danach den restlichen Token-Lebenszyklus ab, und DPoPOptions plus GenerateDPoPKeyPair ergänzen DPoP Proof-of-Possession (RFC 9449) für Anbieter, die es verlangen. Fertige Google- und Microsoft-Presets konfigurieren die gängigen Endpunkte und Scopes für dich.
TsgcHTTP_JWT_Client stellt über JWTOptions alles bereit, was RFC 7519 braucht: den JOSE-Header (alg, typ, kid), die registrierten Payload-Claims (iss, sub, aud, exp, nbf, iat, jti, dazu benutzerdefinierte Claims über AddKeyValue) und das Schlüsselmaterial unter Algorithms für HMAC (HS.Secret), RSA (RS.PrivateKey) und ECDSA (ES.PrivateKey). Rufe Sign auf, um das Token in Compact-Serialisierung direkt zurückzubekommen, nützlich für Dienste ohne eingebauten HTTP- oder WebSocket-Client, oder setze RefreshTokenAfter und lass die Komponente iat/exp automatisch aktualisieren und neu signieren. Dieselbe Komponente klinkt sich direkt in Authentication.Token.JWT von TsgcWebSocketClient, TsgcHTTP1Client und TsgcHTTP2Client ein, sodass jede ausgehende Anfrage ein frisches Bearer-Token trägt, ohne dass du den Header selbst anfasst.
TsgcTOTPAuthenticator ergänzt deine Anmeldung um die sechsstelligen Codes einer beliebigen Authenticator-App, einschließlich Google Authenticator und Microsoft Authenticator. GenerateSecret erzeugt ein zufälliges Base32-Geheimnis, und GetProvisioningURI erstellt die otpauth://-URI, die du bei der Registrierung als QR-Code darstellst. VerifyCode prüft die Eingabe des Benutzers mit einem konfigurierbaren Window für Zeitabweichungen, und die Überladung mit Replay-Schutz akzeptiert niemals denselben Zeitschritt zweimal. GenerateHOTP und VerifyHOTP decken zählerbasierte Hardware-Token ab, GenerateRecoveryCodes füllt eine Liste von Einmal-Ausweichcodes, und Algorithm, Digits und Period wählen HMAC-SHA1, HMAC-SHA256 oder HMAC-SHA512 mit Codes von 6 bis 8 Stellen.
TsgcLDAPClient ist ein LDAP-v3-Client, der Benutzernamen und Kennwörter gegen Active Directory oder ein beliebiges anderes LDAP-Verzeichnis prüft. Security wählt LDAPS auf Port 636 oder StartTLS auf Port 389, und ein abgelehntes StartTLS schließt die Verbindung, statt auf Klartext zurückzufallen. AuthenticationMode wandelt die Eingabe des Benutzers in einen Bind-Namen um, als UPN, als DOMAIN\user-Name, als vollständigen DN oder als Dienst-Bind gefolgt von einer Suche mit UserSearchFilter, und Authenticate erledigt die gesamte Prüfung in einem Aufruf. GetUserGroups liefert direkte oder verschachtelte Gruppenmitgliedschaft über LDAP_MATCHING_RULE_IN_CHAIN, Search paginiert große Ergebnismengen automatisch, und jede öffentliche Methode ist serialisiert, sodass eine einzelne Instanz einen mehrfädigen Server bedienen kann.
Unternehmensweites Single Sign-On für deine Webanwendung
TsgcSAMLServiceProvider macht deine Delphi-Webanwendung zu einem SAML-2.0-Service-Provider für Microsoft Entra ID, Okta, AD FS, Google Workspace, Keycloak und andere Identity Provider. GetMetadata erzeugt die Metadaten, die du beim IdP registrierst, und LoadIdPMetadata liest dessen Metadaten. GetAuthnRequestRedirectURL und GetAuthnRequestPostForm schicken den Browser zur Anmeldung über das Redirect- oder POST-Binding, und ProcessResponse validiert die Antwort: die Signatur ausschließlich gegen die vertrauenswürdigen IdPCertificates, genau eine Assertion zur Abwehr von Signature Wrapping, dann Issuer, Audience, Destination, InResponseTo, das Gültigkeitsfenster und einen Replay-Cache. Das Ergebnis kommt als TsgcSAMLResult mit NameID, Session-Index und den Attributen zurück.
TsgcHTTP_OIDC_Client erweitert den OAuth2-Client um OpenID Connect. Setze OIDCOptions.Issuer, und Discover füllt die Endpunkte sowie die JWKSURI aus der Provider-Konfiguration. Start führt die Anmeldung per Browser mit PKCE und einer frischen Nonce aus und validiert anschließend Signatur, Issuer, Audience, Ablaufzeit und Nonce des ID-Tokens, wobei nur RS256, RS384, RS512, ES256 und ES384 akzeptiert werden, nie none oder die HS-Algorithmen. OnOIDCIDToken liefert die Claims, GetUserInfo gibt das Profil zurück, und ein threadsicherer Schlüssel-Cache folgt der Schlüsselrotation ohne Neustart. Serverseitig prüft sgcOIDC_ValidateIDToken die Bearer-Token, die deine REST-API oder dein WebSocket-Server erhält, gegen denselben Cache.
TsgcMailOAuth2 besorgt die Token, die Microsoft 365 und Gmail für den Mailversand erwarten. Wähle den Provider (mopMicrosoft365, mopGmail oder mopCustom) und die Protocols, die du nutzt, und die Komponente fordert die passenden Scopes an. Flow führt die Anmeldung per Browser mit PKCE und einem Loopback-Redirect aus, oder den Device-Code-Ablauf für Dienste und Konsolen. Refresh erneuert das Access Token, und OnTokensChanged feuert bei jeder Änderung, sodass du das neue Refresh Token speichern kannst. GetXOAuth2 und GetOAuthBearer liefern die SASL-Strings für AUTH XOAUTH2 und AUTH OAUTHBEARER, einsatzbereit für Indy TIdSMTP, TIdIMAP4 und TIdPOP3 oder jede andere Mail-Bibliothek.
TsgcMailOAuth2RFC 7628 · XOAUTH2 · Microsoft 365 · Gmail
ANWENDUNGSFÄLLE
Authentifizierungsabläufe aus Delphi-Code
Beide Komponenten sind ganz gewöhnliche nicht-visuelle Komponenten, sie fügen sich also in das ein, was deine Anwendung ohnehin schon ist: eine VCL-Desktop-Anwendung, ein Windows-Dienst, ein Linux-Daemon. Das sind die Muster, die Kunden bauen, jeweils der Eigenschaft oder Methode zugeordnet, die sie umsetzt.
SI
Anmeldung mit Google oder Microsoftauth2CodePKCE
Fertige Google- und Microsoft-Presets konfigurieren die Authorize- und Token-Endpunkte sowie die Scopes für dich.
Background-Jobs und Service-Konten authentifizieren sich bei einer API, ohne dass ein Benutzer beteiligt ist.
TV
Smart-TVs, Kioske & IoT-Geräteauth2DeviceCode
Das Gerät zeigt einen kurzen Code, der Nutzer schließt die Anmeldung auf seinem Handy oder Laptop ab.
RF
Lange Sitzungen ohne erneute AnmeldungRefresh
Tausche im Hintergrund ein Refresh-Token gegen ein neues Access-Token, ohne dass der Browser erneut übernehmen muss.
WS
Deine eigenen WebSocket- & HTTP-APIs authentifizierenAuthentication.Token.JWT
Der JWT Client signiert Bearer-Tokens für TsgcWebSocketClient, TsgcHTTP1Client und TsgcHTTP2Client automatisch.
SG
Eigenständiges Signieren von TokensSign
Erstelle und signiere eine JWT-Zeichenfolge für jede Codebasis, ohne WebSocket- oder HTTP-Komponente.
SO FUNKTIONIERT ES
Eine Browser-Übergabe, eine Signatur und eine mitgelieferte Runtime
OAuth2 und JWT lösen unterschiedliche Probleme, das eine handelt ein Token mit einem entfernten Server aus, das andere signiert eines lokal, und genau das ist der Grund, sie gemeinsam zu bündeln: sgcAuth verbirgt den Unterschied hinter denselben Komponentenkonventionen, während die mitgelieferte sgcWebSockets Core Runtime darunter die Verkabelung übernimmt.
OAuth2 ist eine Browser-Übergabe, dann reines HTTPS
Start öffnet den Systembrowser (oder übergibt bei Device Code den anzuzeigenden Benutzercode), und ein lokaler HTTP-Listener aus LocalServerOptions fängt die Authorization-Weiterleitung ab. Der Austausch gegen das Access-Token ist ein reiner HTTPS-POST über HTTPClientOptions, auf dem HTTP-Client-Stack der Core Runtime.
JWT ist Signieren, nicht Netzwerk
TsgcHTTP_JWT_Client öffnet nie einen Socket. JWTOptions konfiguriert Header, Payload und Schlüsselmaterial, und Sign liefert das Token in Compact-Serialisierung zurück, HMAC, RSA oder ECDSA, bereit, an jede von deinem eigenen Code gesendete Anfrage angehängt zu werden.
Die Core Runtime ist im Lieferumfang
Eigenständig ist die sgcWebSockets Core Runtime enthalten. Sie steuert den HTTP/TLS-Client-Stack bei, über den beide Komponenten ihre Anfragen absetzen, sowie den JSON-Parser, der die Antworten liest, und ihr voller Quellcode ist Teil des Pakets wie alles andere.
WebAuthn ist das dritte Stück, über sgcCustomIndy
Passwortlose Anmeldung wird von TsgcWSAPIServer_WebAuthn gesteuert, einer sgcWebSockets-Enterprise-/All-Access-Server-Komponente, die den gepatchten Indy-Build braucht, den sgcCustomIndy liefert. Das Bestellen von sgcAuth fügt sgcCustomIndy automatisch zu deinem Warenkorb hinzu.
SCHNELLSTART
Ein Token holen, ein Token signieren
Beide Komponenten folgen demselben Muster: Optionen konfigurieren, dann eine Methode aufrufen. Sie kompilieren in Delphi 7 bis 13 und C++ Builder, und dieselben Eigenschaften sind unter .NET verfügbar.
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;
Dieselbe JWT-Komponente hängt sich direkt an einen WebSocket- oder HTTP-Client: Setze Client.Authentication.Token.Enabled := True und Client.Authentication.Token.JWT := JWT, und jede Anfrage geht mit einem frischen Bearer-Token hinaus.
// 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.");
}
Dieselbe JWT-Komponente hängt sich direkt an einen WebSocket- oder HTTP-Client: Setze Client->Authentication->Token->Enabled = true und Client->Authentication->Token->JWT = JWT, und jede Anfrage geht mit einem frischen Bearer-Token hinaus.
PLATTFORMEN
Reines HTTPS und Signieren, keine native Bibliothek
Keine der beiden Komponenten hängt von mehr ab als dem HTTP-Client-Stack der Core Runtime und den Krypto-Grundfunktionen der Plattform, beide kompilieren und laufen also überall dort, wo Delphi das tut.
sgcAuth wird eigenständig lizenziert, ab €149 für einen einzelnen Entwickler. Alle Lizenzen enthalten den vollen Quellcode, 1 Jahr Updates und 50% bis 70% Verlängerungsrabatt: 50%, wenn du ein Paket verlängerst, 60% bei zwei, 70% bei drei oder mehr. sgcAI, sgcMQ, sgcSocial, sgcCustomIndy, sgcAuth, sgcHTTP und sgcREST zählen jeweils als ein Paket.
An der Kasse erscheinen zwei Positionen: die Berechtigung für die sgcWebSockets Core Runtime, die mit null berechnet wird, und das sgcAuth-Paket selbst. sgcCustomIndy wird für WebAuthn automatisch hinzugefügt, entferne es, falls du bereits eine Lizenz besitzt. Alle Preisdetails.
3,000+Entwickler
20+Jahre
761+Komponenten
30+API-Integrationen
5Plattformen
30 Tage Geld-zurück-GarantieNicht zufrieden? Fordere innerhalb von 30 Tagen nach dem Kauf eine vollständige Rückerstattung an. Rückerstattungsrichtlinie ansehen
Authentifizierung ausliefern, keine Token-Bibliothek
OAuth2 und JWT aus nativem Delphi- und C++-Builder-Code, mit enthaltener Runtime und vollständigem Quellcode im Lieferumfang. Lade den All-Access-Trial-Installer herunter und ziehe noch heute beide Komponenten auf ein Formular.
Kombiniere sgcAuth mit unseren anderen Komponentenbibliotheken für Delphi, C++ Builder und .NET.
sgcWebSockets
Die vollständige Bibliothek: WebSocket-Clients und -Server, HTTP/2, IoT, P2P und KI-Komponenten. Ihre Editionen enthalten auch den OAuth2- und den JWT-Client.
Die angepasste Indy-Bibliothek, auf der sgcWebSockets Enterprise aufbaut, verpackt als Add-on. Erforderlich für WebAuthn, wird sgcAuth-Bestellungen automatisch hinzugefügt.
Datensensitive serverseitige HTML- und UI-Komponenten für Delphi, C++ Builder und .NET, mit Bootstrap 5 und htmx, einschließlich einer WebAuthn-Login-UI-Komponente.