sgcAuth : composants OAuth2, JWT et WebAuthn pour Delphi et C++ Builder
Deux composants clients portent le volet token de l'authentification moderne dans ton application. TsgcHTTP_OAuth2_Client pilote les flux Authorization Code, PKCE, Client Credentials, Resource Owner Password et Device Code auprès de tout fournisseur OAuth2/OIDC. TsgcHTTP_JWT_Client construit, signe et vérifie des JSON Web Tokens, seul ou comme source de token Bearer pour tes clients WebSocket et HTTP. Cinq composants supplémentaires ajoutent des seconds facteurs TOTP, la connexion LDAP et Active Directory, l'authentification unique SAML, OpenID Connect et OAuth2 pour la messagerie. sgcAuth est autonome, il embarque le runtime sgcWebSockets Core sur lequel reposent les deux clients.
Runtime inclussgcWebSockets CoreLe runtime HTTP, TLS et JSON sous les deux clients
OAuth2TsgcHTTP_OAuth2_Client
JWTTsgcHTTP_JWT_Client
VOIS-LE À L'ŒUVRE
Découvre sgcAuth en deux minutes
OAuth2, JWT et passkeys WebAuthn dans Delphi et C++Builder, côté client comme dans ton propre serveur.
7ComposantsUne seule page sur la palette de composants
9RFC implémentéesOAuth2, PKCE, DPoP, Device Code, JWT/JWS/JWE et plus
5PlateformesWindows, macOS, Linux, iOS et Android
100%Code source inclusLes deux clients et le runtime Core inclus
12Mois de mises à jourChaque version publiée tant que ta licence est active
AVANT D'ACHETER
Trois choses à savoir d'abord
Ce que sgcAuth attend de toi, si tu possèdes déjà ces composants, et ce dont WebAuthn a besoin en plus. Les trois réponses sont courtes.
sgcAuth est autonome
Autonome, le runtime sgcWebSockets Core est inclus : la pile client HTTP/TLS par laquelle les deux composants envoient leurs requêtes de token, et les utilitaires JSON qui analysent les réponses. Une seule référence, un seul installateur.
Le code source complet accompagne chaque licence, les deux clients et le runtime en dessous se tracent donc dans ton propre débogueur au lieu de disparaître dans un binaire.
Chevauchement d'édition
Déjà inclus dans ton édition sgcWebSockets ?
Le client OAuth2 et le client JWT sont tous deux livrés dans sgcWebSockets à partir de l'édition Standard, donc si tu possèdes déjà une édition sgcWebSockets, tu as déjà les deux composants. Les composants WebAuthn, TOTP, LDAP, SAML, OpenID Connect et Mail OAuth2 sont livrés dans Enterprise. All-Access inclut tout.
sgcAuth existe pour le cas inverse : tu veux OAuth2 et JWT en Delphi ou C++ Builder sans licencier une édition complète de sgcWebSockets. Vérifie ce que ton édition couvre déjà avant d'acheter.
Complément requis
WebAuthn nécessite sgcCustomIndy
La connexion sans mot de passe par WebAuthn et passkeys est servie par TsgcWSAPIServer_WebAuthn, un composant sgcWebSockets Enterprise/All-Access bâti sur la bibliothèque Indy modifiée que sgcCustomIndy fournit comme complément. WebAuthn nécessite le complément sgcCustomIndy, ajouté automatiquement quand tu commandes sgcAuth. Les composants TOTP, LDAP, SAML, OpenID Connect et Mail OAuth2 sont débloqués par le même complément.
Tu possèdes déjà une licence sgcCustomIndy ? Retire la ligne ajoutée automatiquement de ton panier avant le paiement, sans surcoût dans les deux cas.
CE QUE TU REÇOIS
Clients de tokens, seconds facteurs et authentification unique
Chacun est un composant non visuel que tu déposes sur une fiche ou que tu crées en code, déclaré dans l'unité sgc et enregistré sur la page de palette SGC Auth. Règle les détails du fournisseur, branche les événements, puis appelle Start. Les composants TOTP, LDAP, SAML, OpenID Connect et Mail OAuth2 sont débloqués avec sgcCustomIndy, comme WebAuthn.
OAuth21 composant
Cinq flux d'autorisation, un composant
TsgcHTTP_OAuth2_Client pilote OAuth2Options.GrantType à travers auth2Code pour les applications de confiance côté serveur, auth2CodePKCE pour les applications natives, mobiles et à page unique, auth2ClientCredentials pour les démons et comptes de service, auth2ResourceOwnerPassword, et auth2DeviceCode (RFC 8628) pour les smart TV, les bornes et autres appareils à saisie limitée. Pointe AuthorizationServerOptions vers les points de terminaison d'autorisation, de token, de révocation et d'introspection du fournisseur et le composant fait le reste : quand Active/Start exécute le flux Authorization Code, il ouvre le navigateur système et lance un petit serveur HTTP local depuis LocalServerOptions pour capter la redirection, échangeant le code contre un token en HTTPS pur via HTTPClientOptions. Refresh, Revoke et Introspect couvrent ensuite le cycle de vie du token, et DPoPOptions plus GenerateDPoPKeyPair ajoutent la preuve de possession DPoP (RFC 9449) pour les fournisseurs qui l'exigent. Des préréglages Google et Microsoft prêts à l'emploi configurent les points de terminaison et les scopes courants à ta place.
TsgcHTTP_JWT_Client expose tout ce dont la RFC 7519 a besoin via JWTOptions : l'en-tête JOSE Header (alg, typ, kid), les revendications enregistrées Payload (iss, sub, aud, exp, nbf, iat, jti, plus des revendications personnalisées via AddKeyValue), et le matériel de clé sous Algorithms pour HMAC (HS.Secret), RSA (RS.PrivateKey) et ECDSA (ES.PrivateKey). Appelle Sign pour récupérer directement le token en sérialisation compacte, utile pour les services sans client HTTP ou WebSocket intégré, ou règle RefreshTokenAfter et laisse le composant rafraîchir iat/exp et resigner automatiquement. Le même composant se branche directement sur Authentication.Token.JWT de TsgcWebSocketClient, TsgcHTTP1Client et TsgcHTTP2Client, chaque requête sortante porte donc un token Bearer à jour sans que tu touches l'en-tête toi-même.
Des codes de second facteur, chacun accepté une seule fois
TsgcTOTPAuthenticator ajoute les codes à six chiffres de n'importe quelle application authenticator, Google Authenticator et Microsoft Authenticator compris, à ta connexion. GenerateSecret crée un secret Base32 aléatoire et GetProvisioningURI construit l'URI otpauth:// que tu affiches comme code QR pendant l'inscription. VerifyCode vérifie ce que l'utilisateur saisit avec un Window configurable pour le décalage d'horloge, et sa surcharge protégée contre le rejeu n'accepte jamais deux fois le même pas de temps. GenerateHOTP et VerifyHOTP couvrent les tokens matériels basés sur un compteur, GenerateRecoveryCodes remplit une liste de codes de secours à usage unique, et Algorithm, Digits et Period sélectionnent HMAC-SHA1, HMAC-SHA256 ou HMAC-SHA512 avec des codes de 6 à 8 chiffres.
TsgcLDAPClient est un client LDAP v3 qui vérifie les noms d'utilisateur et mots de passe face à Active Directory ou tout autre annuaire LDAP. Security sélectionne LDAPS sur le port 636 ou StartTLS sur le port 389, et un StartTLS refusé ferme la connexion au lieu de basculer en clair. AuthenticationMode transforme ce que l'utilisateur a saisi en nom de bind, sous forme d'UPN, de nom DOMAINE\utilisateur, de DN complet, ou d'un bind de service suivi d'une recherche avec UserSearchFilter, et Authenticate effectue toute la vérification en un seul appel. GetUserGroups retourne l'appartenance directe ou imbriquée aux groupes via LDAP_MATCHING_RULE_IN_CHAIN, Search pagine automatiquement les grands ensembles de résultats, et chaque méthode publique est sérialisée, donc une seule instance peut servir un serveur multi-thread.
Authentification unique d'entreprise pour ton application web
TsgcSAMLServiceProvider fait de ton application web Delphi un fournisseur de services SAML 2.0 pour Microsoft Entra ID, Okta, AD FS, Google Workspace, Keycloak et d'autres fournisseurs d'identité. GetMetadata produit les métadonnées à enregistrer chez l'IdP et LoadIdPMetadata lit les siennes. GetAuthnRequestRedirectURL et GetAuthnRequestPostForm envoient le navigateur se connecter via le binding Redirect ou POST, et ProcessResponse valide ce qui revient : la signature uniquement face aux IdPCertificates de confiance, exactement une assertion pour déjouer le signature wrapping, puis l'issuer, l'audience, la destination, InResponseTo, la fenêtre de validité et un cache anti-rejeu. Le résultat arrive sous forme de TsgcSAMLResult avec le NameID, l'index de session et les attributs.
TsgcHTTP_OIDC_Client étend le client OAuth2 avec OpenID Connect. Renseigne OIDCOptions.Issuer et Discover remplit les endpoints et le JWKSURI depuis la configuration du fournisseur. Start exécute la connexion navigateur avec PKCE et un nonce frais, puis valide la signature, l'issuer, l'audience, l'expiration et le nonce du jeton d'identité, n'acceptant que RS256, RS384, RS512, ES256 et ES384, jamais none ni les algorithmes HS. OnOIDCIDToken livre les claims, GetUserInfo retourne le profil, et un cache de clés thread-safe suit la rotation des clés sans redémarrage. Côté serveur, sgcOIDC_ValidateIDToken vérifie les jetons porteurs reçus par ton API REST ou ton serveur WebSocket face au même cache.
TsgcMailOAuth2 obtient les jetons que Microsoft 365 et Gmail attendent pour la messagerie. Choisis le Provider (mopMicrosoft365, mopGmail ou mopCustom) et les Protocols que tu utilises, et le composant demande les scopes correspondants. Flow exécute la connexion navigateur avec PKCE et une redirection en boucle locale, ou le device code pour les services et consoles. Refresh renouvelle le jeton d'accès et OnTokensChanged se déclenche à chaque fois, pour que tu stockes le nouveau jeton de rafraîchissement. GetXOAuth2 et GetOAuthBearer retournent les chaînes SASL pour AUTH XOAUTH2 et AUTH OAUTHBEARER, prêtes pour Indy TIdSMTP, TIdIMAP4 et TIdPOP3 ou toute autre bibliothèque mail.
TsgcMailOAuth2RFC 7628 · XOAUTH2 · Microsoft 365 · Gmail
CAS D'USAGE
Des flux d'authentification depuis du code Delphi
Les deux composants sont des composants non visuels ordinaires, ils s'intègrent donc à ce qu'est déjà ton application : une application de bureau VCL, un service Windows, un démon Linux. Voici les schémas que construisent les clients, chacun relié à la propriété ou à la méthode qui le pilote.
SI
Connexion avec Google ou Microsoftauth2CodePKCE
Des préréglages Google et Microsoft prêts à l'emploi configurent les points de terminaison d'autorisation et de token et les scopes à ta place.
M2
Accès API de serveur à serveurauth2ClientCredentials
Les tâches de fond et les comptes de service s'authentifient auprès d'une API sans utilisateur dans la boucle.
TV
Smart TV, bornes et objets connectésauth2DeviceCode
L'appareil affiche un code court, l'utilisateur termine la connexion sur son téléphone ou son ordinateur portable.
RF
Sessions longues sans redemander de connexionRefresh
Échange un refresh token contre un nouveau access token en coulisses, sans passer à nouveau par le navigateur.
WS
Authentifie tes propres API WebSocket et HTTPAuthentication.Token.JWT
Le client JWT signe automatiquement les tokens Bearer pour TsgcWebSocketClient, TsgcHTTP1Client et TsgcHTTP2Client.
SG
Signature de token autonomeSign
Construit et signe une chaîne JWT pour n'importe quelle base de code, sans composant WebSocket ou HTTP requis.
COMMENT ÇA MARCHE
Un passage par le navigateur, une signature, et un runtime inclus
OAuth2 et JWT résolvent des problèmes différents, l'un négocie un token avec un serveur distant, l'autre en signe un localement, et c'est justement l'intérêt de les empaqueter ensemble : sgcAuth masque la différence derrière les mêmes conventions de composants, le runtime sgcWebSockets Core inclus faisant la plomberie en dessous.
OAuth2, c'est un passage par le navigateur, puis du HTTPS pur
Start ouvre le navigateur système (ou, pour Device Code, te remet le code utilisateur à afficher) et un écouteur HTTP local depuis LocalServerOptions capte la redirection d'autorisation. L'échange contre le token est une requête HTTPS POST en clair, émise via HTTPClientOptions, sur la pile client HTTP du runtime Core.
JWT, c'est de la signature, pas du réseau
TsgcHTTP_JWT_Client n'ouvre jamais de socket. JWTOptions configure l'en-tête, la charge utile et le matériel de clé, et Sign renvoie le token en sérialisation compacte, HMAC, RSA ou ECDSA, prêt à attacher à n'importe quelle requête que ton propre code envoie.
Le runtime Core est dans la boîte
Autonome, le runtime sgcWebSockets Core est inclus. Il fournit la pile client HTTP/TLS par laquelle les deux composants envoient leurs requêtes POST et l'analyseur JSON qui lit les réponses, et son code source complet fait partie du package comme tout le reste.
WebAuthn est la troisième pièce, via sgcCustomIndy
La connexion sans mot de passe est gérée par TsgcWSAPIServer_WebAuthn, un composant serveur sgcWebSockets Enterprise/All-Access qui a besoin de la version Indy modifiée que fournit sgcCustomIndy. Commander sgcAuth ajoute sgcCustomIndy à ton panier automatiquement.
DÉMARRAGE RAPIDE
Obtenir un token, signer un token
Les deux composants suivent la même forme : configure les options, puis appelle une méthode. Ils se compilent de Delphi 7 à 13 et sur C++ Builder, et les mêmes propriétés sont exposées en .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;
Le même composant JWT s'attache directement à un client WebSocket ou HTTP : règle Client.Authentication.Token.Enabled := True et Client.Authentication.Token.JWT := JWT, et chaque requête part avec un token Bearer à jour.
// 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.");
}
Le même composant JWT s'attache directement à un client WebSocket ou HTTP : règle Client->Authentication->Token->Enabled = true et Client->Authentication->Token->JWT = JWT, et chaque requête part avec un token Bearer à jour.
PLATEFORMES
Du HTTPS pur et de la signature, aucune bibliothèque native
Aucun des deux composants ne dépend de plus que la pile client HTTP du runtime Core et les primitives crypto de la plateforme, ils se compilent et tournent donc partout où Delphi le fait.
sgcAuth se licencie tout seul, à partir de €149 pour un développeur. Toutes les licences incluent le code source complet, 1 an de mises à jour et une remise de renouvellement de 50 % à 70 % : 50 % si tu renouvelles un pack, 60 % pour deux, 70 % pour trois ou plus. sgcAI, sgcMQ, sgcSocial, sgcCustomIndy, sgcAuth, sgcHTTP et sgcREST comptent chacun pour un pack.
Le paiement liste deux articles : le droit au runtime sgcWebSockets Core, facturé à zéro, et le pack sgcAuth lui-même. sgcCustomIndy est ajouté automatiquement pour WebAuthn, retire-le si tu possèdes déjà une licence. Détail complet des tarifs.
3,000+Développeurs
20+Ans
761+Composants
30+Intégrations d'API
5Plateformes
Garantie satisfait ou remboursé de 30 joursPas satisfait ? Demandez un remboursement intégral dans les 30 jours suivant l'achat. Voir la politique de remboursement
Livre de l'authentification, pas une bibliothèque de tokens
OAuth2 et JWT depuis du code Delphi et C++ Builder natif, avec le runtime inclus et le code source complet dans la boîte. Télécharge l'installateur d'essai All-Access et dépose les deux composants sur une fiche dès aujourd'hui.
La bibliothèque Indy modifiée sur laquelle repose sgcWebSockets Enterprise, empaquetée comme complément. Requis pour WebAuthn, ajouté automatiquement aux commandes sgcAuth.
Composants HTML/UI côté serveur et orientés données pour Delphi, C++ Builder et .NET, avec Bootstrap 5 et htmx, dont un composant d'interface de connexion WebAuthn.