sgcAuth:面向 Delphi 和 C++ Builder 的 OAuth2、JWT 与 WebAuthn 组件
独立产品 OAuth2、JWT 与 WebAuthn

sgcAuth:面向 Delphi 和 C++ Builder 的 OAuth2、JWT 与 WebAuthn 组件

两个客户端组件,把现代身份验证中令牌相关的部分带入您的应用程序。TsgcHTTP_OAuth2_Client 面向任意 OAuth2/OIDC 提供商,实现 Authorization Code、PKCE、Client Credentials、Resource Owner Password 和 Device Code 五种授权模式。TsgcHTTP_JWT_Client 用于构建、签名和验证 JSON Web Token,既可以独立使用,也可以作为您的 WebSocket 和 HTTP 客户端的 Bearer 令牌来源。sgcAuth 是独立产品,内置两个客户端所基于的 sgcWebSockets Core 运行时。

完整源代码
Delphi 7 到 13 和 C++ Builder
内置运行时 sgcWebSockets Core 两个客户端底层共用的 HTTP、TLS 和 JSON 运行时
OAuth2 TsgcHTTP_OAuth2_Client
JWT TsgcHTTP_JWT_Client
2 客户端组件 组件面板上的一个页面
9 已实现的 RFC OAuth2、PKCE、DPoP、Device Code、JWT/JWS/JWE 等
5 支持平台 Windows、macOS、Linux、iOS 和 Android
100% 包含源代码 两个客户端及内置的 Core 运行时
12 个月更新 授权有效期内发布的每个版本

三件值得先了解的事

sgcAuth 需要您准备什么、您是否已经拥有这些组件,以及 WebAuthn 还需要什么。三个答案都很简短。

sgcAuth 是自包含的

作为独立产品,已包含 sgcWebSockets Core 运行时:两个组件用于 POST 令牌请求的 HTTP/TLS 客户端栈,以及解析响应的 JSON 机制。一个 SKU,一个安装程序。

每份授权都附带完整源代码,因此两个客户端及其底层运行时都可以在您自己的调试器中单步跟踪,而不会消失在二进制文件里。

版本重叠

您的 sgcWebSockets 版本中是否已经包含?

OAuth2 客户端和 JWT 客户端均自 Standard 版本起随 sgcWebSockets 提供,因此只要您拥有任意版本的 sgcWebSockets,就已经拥有这两个组件。All-Access 包含全部内容。

sgcAuth 面向相反的情形:您希望在 Delphi 或 C++ Builder 中使用 OAuth2 和 JWT 客户端,但不想购买完整的 sgcWebSockets 版本。购买前请先确认您的版本已经覆盖了哪些内容。

需要附加包

WebAuthn 需要 sgcCustomIndy

WebAuthn 无密码登录由 TsgcWSAPIServer_WebAuthn 提供,这是一个 sgcWebSockets Enterprise/All-Access 组件,构建在 sgcCustomIndy 所提供的经过修补的 Indy 库之上。WebAuthn 需要 sgcCustomIndy 附加包,订购 sgcAuth 时会自动添加。

已经拥有 sgcCustomIndy 授权?可以在结账前从购物车中移除自动添加的这一项,两种方式都不会产生额外费用。

两个客户端,覆盖完整的令牌生命周期

两者都是非可视化组件,可以拖放到窗体上,也可以在代码中创建,声明在 sgc 前缀单元中,并注册在 SGC Auth 面板页上。设置提供商信息,接好事件,然后调用 Start

OAuth21 个组件

五种授权模式,一个组件

TsgcHTTP_OAuth2_Client 通过 OAuth2Options.GrantType 驱动多种授权模式:面向可信服务端应用的 auth2Code,面向原生、移动端和单页应用的 auth2CodePKCE,面向守护进程和服务账号的 auth2ClientCredentials,以及 auth2ResourceOwnerPassword,还有面向智能电视、自助终端等输入受限设备的 auth2DeviceCode(RFC 8628)。将 AuthorizationServerOptions 指向提供商的授权、令牌、吊销和自省端点,其余交给组件处理:当 Active/Start 运行 Authorization Code 流程时,它会打开系统浏览器,并通过 LocalServerOptions 启动一个小型本地 HTTP 服务器来捕获重定向,再通过 HTTPClientOptions 以纯 HTTPS 方式用授权码换取令牌。此后 RefreshRevokeIntrospect 覆盖令牌的后续生命周期,DPoPOptions 配合 GenerateDPoPKeyPair 为要求 DPoP 持有证明(RFC 9449)的提供商提供支持。现成的 Google 和 Microsoft 预设会为您配置好常用的端点和范围。

TsgcHTTP_OAuth2_Client RFC 6749 · PKCE · Device Code · DPoP
JWT1 个组件

签名、附加或验证,由您选择

TsgcHTTP_JWT_Client 通过 JWTOptions 提供 RFC 7519 所需的一切:JOSE Headeralgtypkid),已注册的 Payload 声明(isssubaudexpnbfiatjti,另可通过 AddKeyValue 添加自定义声明),以及 Algorithms 下用于 HMAC(HS.Secret)、RSA(RS.PrivateKey)和 ECDSA(ES.PrivateKey)的密钥材料。调用 Sign 可直接得到紧凑序列化格式的令牌,适合没有内置 HTTP 或 WebSocket 客户端的服务;也可以设置 RefreshTokenAfter,让组件自动刷新 iat/exp 并重新签名。同一个组件可直接接入 TsgcWebSocketClientTsgcHTTP1ClientTsgcHTTP2ClientAuthentication.Token.JWT,这样每个出站请求都会携带最新的 Bearer 令牌,而无需您自己处理请求头。

TsgcHTTP_JWT_Client RFC 7519 · JWS · JWE

从 Delphi 代码实现身份验证流程

两个组件都是普通的非可视化组件,因此可以嵌入到您现有的任何应用程序中:VCL 桌面应用、Windows 服务、Linux 守护进程。以下是客户常用的模式,每一种都对应驱动它的属性或方法。

使用 Google 或 Microsoft 登录 auth2CodePKCE

现成的 Google 和 Microsoft 预设会为您配置好授权和令牌端点及范围。

服务器到服务器的 API 访问 auth2ClientCredentials

后台任务和服务账号无需用户参与即可对 API 进行身份验证。

智能电视、自助终端和物联网设备 auth2DeviceCode

设备显示一个简短的代码,用户在手机或笔记本电脑上完成登录。

长会话,无需重新提示登录 Refresh

在后台用刷新令牌换取新的访问令牌,无需再次跳转浏览器。

为您自己的 WebSocket 和 HTTP API 提供身份验证 Authentication.Token.JWT

JWT 客户端会自动为 TsgcWebSocketClient、TsgcHTTP1Client 和 TsgcHTTP2Client 签发 Bearer 令牌。

独立签发令牌 Sign

为任意代码库构建并签名一个 JWT 字符串,无需 WebSocket 或 HTTP 组件。

一次浏览器跳转、一次签名,加一个内置运行时

OAuth2 和 JWT 解决的是不同的问题:一个是与远程服务器协商令牌,另一个是在本地签名令牌,而这正是把它们打包在一起的意义所在:sgcAuth 用同一套组件约定把这种差异隐藏起来,底层的管道工作交给内置的 sgcWebSockets Core 运行时完成。

OAuth2 先是浏览器跳转,然后是纯 HTTPS

Start 会打开系统浏览器(对于 Device Code 流程,则是把用户代码交给您显示),并由 LocalServerOptions 启动的本地 HTTP 监听器捕获授权重定向。换取访问令牌是通过 HTTPClientOptions、在 Core 运行时的 HTTP 客户端栈上发出的一次纯 HTTPS POST 请求。

JWT 是签名,不是网络通信

TsgcHTTP_JWT_Client 从不打开套接字。JWTOptions 配置头部、载荷和密钥材料,Sign 返回紧凑序列化格式的令牌(HMAC、RSA 或 ECDSA),可直接附加到您自己代码发出的任意请求上。

内置 Core 运行时

作为独立产品,已包含 sgcWebSockets Core 运行时。它提供两个组件用于 POST 请求的 HTTP/TLS 客户端栈,以及读取响应的 JSON 解析器,其完整源代码也和其他一切一样,是本产品包的一部分。

WebAuthn 是第三块拼图,经由 sgcCustomIndy

无密码登录由 TsgcWSAPIServer_WebAuthn 处理,这是一个 sgcWebSockets Enterprise/All-Access 服务端组件,需要 sgcCustomIndy 提供的经过修补的 Indy 编译版本。订购 sgcAuth 时会自动将 sgcCustomIndy 添加到您的购物车。

获取一个令牌,签发一个令牌

两个组件遵循同样的形态:配置选项,然后调用方法。它们都可以在 Delphi 7 到 13 以及 C++ Builder 中编译,.NET 也提供相同的属性。

uses
  sgcHTTP_OAuth2_Client, sgcHTTP_JWT_Client;

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.Text := 'openid 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);
begin
  Memo1.Lines.Add('Access token received.');
end;

同一个 JWT 组件也可以直接接入 WebSocket 或 HTTP 客户端:设置 Client.Authentication.Token.Enabled := TrueClient.Authentication.Token.JWT := JWT,之后每个请求都会携带最新的 Bearer 令牌。

// include: sgcHTTP_OAuth2_Client.hpp, sgcHTTP_JWT_Client.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->Text = "openid 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)
{
  Memo1->Lines->Add("Access token received.");
}

同一个 JWT 组件也可以直接接入 WebSocket 或 HTTP 客户端:设置 Client->Authentication->Token->Enabled = trueClient->Authentication->Token->JWT = JWT,之后每个请求都会携带最新的 Bearer 令牌。

纯 HTTPS 与签名,无需原生库

两个组件都只依赖 Core 运行时的 HTTP 客户端栈和平台的加密原语,因此可以在 Delphi 支持的任何平台上编译和运行。

TsgcHTTP_OAuth2_Client Authorization Code, PKCE, Client Credentials, Resource Owner Password, Device Code
Windows Win32 Windows Win64 Linux64 macOS iOS Android
TsgcHTTP_JWT_Client HS256/384/512, RS256/384/512, ES256/384/512
Windows Win32 Windows Win64 Linux64 macOS iOS Android
IDE 支持 一份源码树,每个版本各有设计期包
Delphi 7 到 13 C++ Builder
试用安装程序 sgcWebSockets All-Access 试用版包含 Auth 组件
一次下载,两个组件

下载试用安装程序 →

一个独立的包

sgcAuth 单独授权,单个开发者起价 €149。所有授权均包含完整源代码、1 年更新,以及 50% 到 70% 的续订折扣:续订 1 个包为 50%,2 个包为 60%,3 个及以上为 70%。sgcAI、sgcMQ、sgcSocial、sgcCustomIndy、sgcAuth 和 sgcHTTP 各算作一个包。

sgcAuth

€149

提供 Single、Team 和 Site 授权。

  • OAuth2 客户端:Authorization Code、PKCE、Client Credentials、Device Code
  • JWT 客户端,用于签发、签名和验证令牌
  • WebAuthn 通行密钥,经由 sgcCustomIndy(自动添加)
  • 已包含 sgcWebSockets Core 运行时
  • Delphi 7 到 13 和 C++ Builder
  • 完整源代码
  • 1 年更新

sgcAuth 已包含 sgcWebSockets Core 运行时,因此使用 OAuth2 和 JWT 客户端无需再购买其他任何东西。

结算页面会列出两项:计价为零的 sgcWebSockets Core 运行时授权,以及 sgcAuth 包本身。sgcCustomIndy 会为 WebAuthn 自动添加,如果您已经拥有授权,可以将其移除。查看完整价格详情

3,000+Developers
20+Years
761+Components
30+API Integrations
5Platforms
30 天退款保证不满意?可在购买后 30 天内申请全额退款。 查看退款政策

交付完整的身份验证,而不只是一个令牌库

在原生 Delphi 和 C++ Builder 代码中使用 OAuth2 和 JWT,内置运行时,并提供完整源代码。立即下载 All-Access 试用安装程序,把两个组件拖到窗体上试试。

eSeGeCe 的其他产品

把 sgcAuth 与我们其他的 Delphi、C++ Builder 和 .NET 组件库搭配使用。

sgcWebSockets

完整的库:WebSocket 客户端和服务器、HTTP/2、IoT、P2P 和 AI 组件。它的各个版本也包含 OAuth2 和 JWT 客户端。

了解更多 →

sgcCustomIndy

sgcWebSockets Enterprise 所基于的定制 Indy 库,以附加包形式提供。WebAuthn 需要它,订购 sgcAuth 时会自动添加。

了解更多 →

sgcAI

AI、LLM 与 MCP 组件。一个聊天组件即可接入 OpenAI、Anthropic、Gemini、DeepSeek、Ollama、Grok 和 Mistral。

了解更多 →

sgcMQ

原生 MQTT 3.1.1/5.0、AMQP 0.9.1、AMQP 1.0、Apache Kafka 和 STOMP 客户端组件,已内置 Core 运行时。

了解更多 →

sgcSocial

WhatsApp Business Cloud API 和 Telegram TDLib 客户端组件,已内置 Core 运行时。

了解更多 →

sgcHTML

面向 Delphi、C++ Builder 和 .NET 的数据感知服务器端 HTML/UI 组件,配套 Bootstrap 5 和 htmx,其中包含一个 WebAuthn 登录 UI 组件。

了解更多 →