sgcAuth: componentes OAuth2, JWT y WebAuthn para Delphi y C++ Builder
Dos componentes cliente llevan el lado de los tokens de la autenticación moderna a tu aplicación. TsgcHTTP_OAuth2_Client ejecuta los grants Authorization Code, PKCE, Client Credentials, Resource Owner Password y Device Code contra cualquier proveedor OAuth2/OIDC. TsgcHTTP_JWT_Client construye, firma y verifica JSON Web Tokens, por sí solo o como fuente del token Bearer para tus clientes WebSocket y HTTP. Cinco componentes más añaden segundos factores TOTP, inicio de sesión LDAP y Active Directory, inicio de sesión único SAML, OpenID Connect y OAuth2 para correo. sgcAuth es independiente, incluye el runtime sgcWebSockets Core sobre el que están construidos ambos clientes.
Runtime incluidosgcWebSockets CoreEl runtime HTTP, TLS y JSON bajo ambos clientes
OAuth2TsgcHTTP_OAuth2_Client
JWTTsgcHTTP_JWT_Client
MÍRALO FUNCIONAR
sgcAuth en dos minutos
OAuth2, JWT y passkeys WebAuthn en Delphi y C++Builder, en el cliente y en tu propio servidor.
7ComponentesUna sola página en la paleta de componentes
9RFCs implementadasOAuth2, PKCE, DPoP, Device Code, JWT/JWS/JWE y más
5PlataformasWindows, macOS, Linux, iOS y Android
100%Código fuente incluidoAmbos clientes y el runtime Core incluido
12Meses de actualizacionesCada versión publicada mientras tu licencia esté activa
ANTES DE COMPRAR
Tres cosas que conviene saber primero
Qué necesita sgcAuth de ti, si ya tienes estos componentes, y qué necesita WebAuthn además. Las tres respuestas son breves.
sgcAuth es autocontenido
Independiente, el runtime sgcWebSockets Core viene incluido: la pila cliente HTTP/TLS con la que ambos componentes envían por POST sus peticiones de token, y la maquinaria JSON que analiza las respuestas. Un solo SKU, un solo instalador.
El código fuente completo se entrega con cada licencia, así que puedes recorrer paso a paso ambos clientes y el runtime que hay debajo en tu propio depurador, en lugar de verlos desaparecer dentro de un binario.
Solapamiento de ediciones
¿Ya lo tienes en tu edición de sgcWebSockets?
Tanto el cliente OAuth2 como el cliente JWT se entregan dentro de sgcWebSockets desde la edición Standard en adelante, así que si ya tienes cualquier edición de sgcWebSockets ya dispones de ambos componentes. Los componentes WebAuthn, TOTP, LDAP, SAML, OpenID Connect y Mail OAuth2 se entregan en Enterprise. All-Access lo incluye todo.
sgcAuth existe para el caso contrario: quieres soporte de cliente OAuth2 y JWT en Delphi o C++ Builder sin licenciar una edición completa de sgcWebSockets. Comprueba qué cubre ya tu edición antes de comprar.
Add-on necesario
WebAuthn necesita sgcCustomIndy
El inicio de sesión sin contraseña con WebAuthn y passkeys lo sirve TsgcWSAPIServer_WebAuthn, un componente de sgcWebSockets Enterprise/All-Access construido sobre la librería Indy parcheada que sgcCustomIndy entrega como add-on. WebAuthn requiere el add-on sgcCustomIndy, que se añade automáticamente cuando pides sgcAuth. Los componentes TOTP, LDAP, SAML, OpenID Connect y Mail OAuth2 se desbloquean con el mismo add-on.
¿Ya tienes una licencia de sgcCustomIndy? Elimina la línea añadida automáticamente de tu carrito antes de pagar, no hay coste extra en ningún caso.
QUÉ INCLUYE
Clientes de token, segundos factores e inicio de sesión único
Cada uno es un componente no visual que sueltas en un formulario o creas por código, declarado bajo el prefijo de unidad sgc y registrado en la página de paleta SGC Auth. Configura los datos del proveedor, conecta los eventos y luego llama a Start. Los componentes TOTP, LDAP, SAML, OpenID Connect y Mail OAuth2 se desbloquean junto con sgcCustomIndy, igual que WebAuthn.
OAuth21 componente
Cinco tipos de grant, un componente
TsgcHTTP_OAuth2_Client controla OAuth2Options.GrantType a través de auth2Code para aplicaciones de servidor de confianza, auth2CodePKCE para aplicaciones nativas, móviles y de una sola página, auth2ClientCredentials para daemons y cuentas de servicio, auth2ResourceOwnerPassword, y auth2DeviceCode (RFC 8628) para smart TVs, kioscos y otros dispositivos con entrada limitada. Apunta AuthorizationServerOptions a los endpoints de autorización, token, revocación e introspección de tu proveedor y el componente se encarga del resto: cuando Active/Start ejecuta el flujo Authorization Code, abre el navegador del sistema y levanta un pequeño servidor HTTP local a partir de LocalServerOptions para capturar la redirección, intercambiando el código por un token sobre HTTPS puro a través de HTTPClientOptions. Refresh, Revoke e Introspect cubren el ciclo de vida del token a partir de ahí, y DPoPOptions junto con GenerateDPoPKeyPair añaden la prueba de posesión DPoP (RFC 9449) para los proveedores que la requieren. Los presets ya preparados de Google y Microsoft configuran por ti los endpoints y scopes habituales.
TsgcHTTP_JWT_Client publica todo lo que necesita RFC 7519 a través de JWTOptions: la cabecera JOSE Header (alg, typ, kid), los claims registrados de Payload (iss, sub, aud, exp, nbf, iat, jti, más claims personalizados a través de AddKeyValue), y el material de clave bajo Algorithms para HMAC (HS.Secret), RSA (RS.PrivateKey) y ECDSA (ES.PrivateKey). Llama a Sign para obtener directamente el token en serialización compacta, útil para servicios sin cliente HTTP o WebSocket propio, o configura RefreshTokenAfter y deja que el componente refresque iat/exp y vuelva a firmar automáticamente. El mismo componente se conecta directamente a Authentication.Token.JWT en TsgcWebSocketClient, TsgcHTTP1Client y TsgcHTTP2Client, así que cada petición saliente lleva un token Bearer recién firmado sin que tengas que tocar la cabecera tú mismo.
Códigos de segundo factor, cada uno aceptado una vez
TsgcTOTPAuthenticator añade a tu inicio de sesión los códigos de seis dígitos de cualquier app de autenticación, Google Authenticator y Microsoft Authenticator incluidas. GenerateSecret crea un secreto Base32 aleatorio y GetProvisioningURI construye la URI otpauth:// que renderizas como código QR durante el alta. VerifyCode comprueba lo que escribe el usuario con una Window configurable para el desfase de reloj, y su sobrecarga con protección contra repetición nunca acepta dos veces el mismo intervalo de tiempo. GenerateHOTP y VerifyHOTP cubren los tokens hardware basados en contador, GenerateRecoveryCodes rellena una lista de códigos de reserva de un solo uso, y Algorithm, Digits y Period seleccionan HMAC-SHA1, HMAC-SHA256 o HMAC-SHA512 con códigos de 6 a 8 dígitos.
TsgcLDAPClient es un cliente LDAP v3 que comprueba nombres de usuario y contraseñas contra Active Directory o cualquier otro directorio LDAP. Security selecciona LDAPS en el puerto 636 o StartTLS en el puerto 389, y un StartTLS rechazado cierra la conexión en lugar de caer de vuelta a texto claro. AuthenticationMode convierte lo que escribe el usuario en el nombre de bind, como UPN, como nombre DOMAIN\user, como DN completo, o como bind de servicio seguido de una búsqueda con UserSearchFilter, y Authenticate hace toda la comprobación en una sola llamada. GetUserGroups devuelve la pertenencia a grupos directa o anidada a través de LDAP_MATCHING_RULE_IN_CHAIN, Search pagina automáticamente los resultados grandes, y cada método público está serializado, así que una sola instancia puede servir a un servidor multihilo.
Inicio de sesión único empresarial para tu web app
TsgcSAMLServiceProvider convierte tu aplicación web Delphi en un proveedor de servicio SAML 2.0 para Microsoft Entra ID, Okta, AD FS, Google Workspace, Keycloak y otros proveedores de identidad. GetMetadata produce los metadatos que registras en el IdP y LoadIdPMetadata lee los suyos. GetAuthnRequestRedirectURL y GetAuthnRequestPostForm envían el navegador a iniciar sesión por el binding Redirect o POST, y ProcessResponse valida lo que vuelve: la firma solo contra los IdPCertificates de confianza, exactamente una aserción para evitar el signature wrapping, y a continuación el emisor, la audiencia, el destino, InResponseTo, la ventana de validez y una caché de repeticiones. El resultado llega como un TsgcSAMLResult con el NameID, el índice de sesión y los atributos.
TsgcHTTP_OIDC_Client extiende el cliente OAuth2 con OpenID Connect. Define OIDCOptions.Issuer y Discover rellena los endpoints y el JWKSURI a partir de la configuración del proveedor. Start ejecuta el inicio de sesión por navegador con PKCE y un nonce nuevo, y luego valida la firma, el emisor, la audiencia, la caducidad y el nonce del token ID, aceptando solo RS256, RS384, RS512, ES256 y ES384, nunca none ni los algoritmos HS. OnOIDCIDToken entrega los claims, GetUserInfo devuelve el perfil, y una caché de claves segura para hilos sigue la rotación de claves sin necesidad de reiniciar. En el lado servidor, sgcOIDC_ValidateIDToken comprueba los tokens Bearer que recibe tu API REST o tu servidor WebSocket contra la misma caché.
TsgcMailOAuth2 obtiene los tokens que Microsoft 365 y Gmail esperan para el correo. Elige el Provider (mopMicrosoft365, mopGmail o mopCustom) y los Protocols que usas, y el componente solicita los scopes correspondientes. Flow ejecuta el inicio de sesión por navegador con PKCE y una redirección loopback, o el flujo de código de dispositivo para servicios y consolas. Refresh renueva el token de acceso y OnTokensChanged se dispara cada vez, así puedes guardar el nuevo refresh token. GetXOAuth2 y GetOAuthBearer devuelven las cadenas SASL para AUTH XOAUTH2 y AUTH OAUTHBEARER, listas para Indy TIdSMTP, TIdIMAP4 y TIdPOP3 o cualquier otra librería de correo.
TsgcMailOAuth2RFC 7628 · XOAUTH2 · Microsoft 365 · Gmail
CASOS DE USO
Flujos de autenticación desde código Delphi
Los dos componentes son componentes no visuales corrientes, así que encajan en lo que ya sea tu aplicación: una aplicación de escritorio VCL, un servicio de Windows, un demonio de Linux. Estos son los patrones que construyen los clientes, cada uno asociado a la propiedad o método que lo activa.
SI
Inicio de sesión con Google o Microsoftauth2CodePKCE
Los presets ya preparados de Google y Microsoft configuran por ti los endpoints de autorización y token y los scopes.
M2
Acceso a API servidor a servidorauth2ClientCredentials
Los trabajos en segundo plano y las cuentas de servicio se autentican ante una API sin que haya un usuario de por medio.
TV
Smart TVs, kioscos y dispositivos IoTauth2DeviceCode
El dispositivo muestra un código corto, y el usuario termina el inicio de sesión desde su móvil u ordenador portátil.
RF
Sesiones largas sin volver a pedir credencialesRefresh
Intercambia un refresh token por un nuevo access token en segundo plano, sin necesidad de pasar por el navegador.
WS
Autentica tus propias APIs WebSocket y HTTPAuthentication.Token.JWT
El cliente JWT firma tokens Bearer para TsgcWebSocketClient, TsgcHTTP1Client y TsgcHTTP2Client automáticamente.
SG
Firma de tokens independienteSign
Construye y firma una cadena JWT para cualquier base de código, sin necesidad de un componente WebSocket o HTTP.
CÓMO FUNCIONA
Un salto al navegador, una firma y un runtime incluido
OAuth2 y JWT resuelven problemas distintos, uno negocia un token con un servidor remoto, el otro firma uno localmente, y ese es precisamente el sentido de empaquetarlos juntos: sgcAuth oculta la diferencia detrás de las mismas convenciones de componente, con el runtime sgcWebSockets Core incluido haciendo la fontanería por debajo.
OAuth2 es un salto al navegador, y luego HTTPS puro
Start abre el navegador del sistema (o, para Device Code, te entrega el código de usuario que mostrar) y un listener HTTP local a partir de LocalServerOptions captura la redirección de autorización. El intercambio por el access token es un POST HTTPS puro emitido a través de HTTPClientOptions, sobre la pila cliente HTTP del runtime Core.
JWT es firma, no red
TsgcHTTP_JWT_Client nunca abre un socket. JWTOptions configura la cabecera, el payload y el material de clave, y Sign devuelve el token en serialización compacta, HMAC, RSA o ECDSA, listo para adjuntar a cualquier petición que envíe tu propio código.
El runtime Core viene en la caja
Independiente, el runtime sgcWebSockets Core viene incluido. Aporta la pila cliente HTTP/TLS por la que ambos componentes envían sus peticiones POST y el analizador JSON que lee las respuestas, y su código fuente completo forma parte del paquete como todo lo demás.
WebAuthn es la tercera pieza, vía sgcCustomIndy
El inicio de sesión sin contraseña lo gestiona TsgcWSAPIServer_WebAuthn, un componente servidor de sgcWebSockets Enterprise/All-Access que necesita la compilación Indy parcheada que entrega sgcCustomIndy. Pedir sgcAuth añade sgcCustomIndy a tu carrito automáticamente.
INICIO RÁPIDO
Obtén un token, firma un token
Los dos componentes siguen la misma forma: configura las opciones y luego llama a un método. Compilan en Delphi 7 a 13 y en C++ Builder, y las mismas propiedades están expuestas 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;
El mismo componente JWT se conecta directamente a un cliente WebSocket o HTTP: configura Client.Authentication.Token.Enabled := True y Client.Authentication.Token.JWT := JWT, y cada petición sale con un token Bearer recién firmado.
// 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.");
}
El mismo componente JWT se conecta directamente a un cliente WebSocket o HTTP: configura Client->Authentication->Token->Enabled = true y Client->Authentication->Token->JWT = JWT, y cada petición sale con un token Bearer recién firmado.
PLATAFORMAS
HTTPS puro y firma, sin librería nativa
Ninguno de los dos componentes depende de nada más allá de la pila cliente HTTP del runtime Core y las primitivas criptográficas de la plataforma, así que ambos compilan y se ejecutan en cualquier lugar donde lo haga Delphi.
sgcAuth se licencia por separado, desde €149 para un solo desarrollador. Todas las licencias incluyen código fuente completo, 1 año de actualizaciones y un descuento de renovación del 50% al 70%: un 50% al renovar un pack, un 60% con dos y un 70% con tres o más. sgcAI, sgcMQ, sgcSocial, sgcCustomIndy, sgcAuth, sgcHTTP y sgcREST cuentan cada uno como un pack.
El pedido muestra dos líneas: el derecho de uso del runtime sgcWebSockets Core, que se factura a cero, y el propio paquete sgcAuth. sgcCustomIndy se añade automáticamente para WebAuthn, elimínalo si ya tienes una licencia. Todos los detalles de precios.
3,000+Desarrolladores
20+Años
761+Componentes
30+Integraciones de API
5Plataformas
Garantía de devolución de 30 días¿No estás satisfecho? Solicita un reembolso completo en los 30 días posteriores a la compra. Ver política de reembolso
Lanza autenticación, no una librería de tokens
OAuth2 y JWT desde código nativo de Delphi y C++ Builder, con el runtime incluido y el código fuente completo en la caja. Descarga hoy mismo el instalador de prueba All-Access y suelta los dos componentes en un formulario.
La librería Indy personalizada sobre la que está construido sgcWebSockets Enterprise, empaquetada como add-on. Necesaria para WebAuthn, se añade automáticamente a los pedidos de sgcAuth.
Componentes HTML/UI de servidor conectados a datos para Delphi, C++ Builder y .NET, con Bootstrap 5 y htmx, incluyendo un componente de UI de inicio de sesión WebAuthn.