Delphi OpenID Connect 客户端
使用 Google、Microsoft Entra ID、Okta、Auth0、Keycloak 或 AWS Cognito 登录用户,并确认其身份。该组件会自动发现提供者、以 PKCE 和 nonce 运行浏览器登录流程,并验证返回的 ID 令牌。
使用 Google、Microsoft Entra ID、Okta、Auth0、Keycloak 或 AWS Cognito 登录用户,并确认其身份。该组件会自动发现提供者、以 PKCE 和 nonce 运行浏览器登录流程,并验证返回的 ID 令牌。
在 OAuth2 客户端的基础上扩展了 OpenID Connect 的身份层:默认启用发现机制、PKCE 和 nonce,根据提供者的签名密钥验证 ID 令牌,并支持 userinfo 端点。
TsgcHTTP_OIDC_Client(单元 sgcAuth_OIDC_Client)
Windows, macOS, Linux, iOS, Android
Enterprise 和 All-Access,以及 sgcAuth 软件包。sgcWebSockets .NET 中同样提供。
设置 OIDCOptions.Issuer 和客户端凭据,调用 Start,并在 OnOIDCIDToken 中读取已验证的声明。未设置端点时会自动运行发现流程。
uses
sgcAuth_OIDC_Client;
// OIDC 是窗体字段:OIDC: TsgcHTTP_OIDC_Client;
procedure TForm1.SignIn;
begin
OIDC := TsgcHTTP_OIDC_Client.Create(nil);
OIDC.OnOIDCIDToken := OnOIDCIDTokenEvent;
OIDC.OIDCOptions.Issuer := 'https://accounts.google.com';
OIDC.OAuth2Options.ClientId := 'your-client-id';
OIDC.OAuth2Options.ClientSecret := 'your-client-secret';
OIDC.AuthorizationServerOptions.Scope.Clear;
OIDC.AuthorizationServerOptions.Scope.Add('openid');
OIDC.AuthorizationServerOptions.Scope.Add('profile');
OIDC.AuthorizationServerOptions.Scope.Add('email');
OIDC.LocalServerOptions.IP := '127.0.0.1';
OIDC.LocalServerOptions.Port := 8080;
OIDC.LocalServerOptions.RedirectURL := 'http://127.0.0.1:8080/';
// 先执行发现流程,再以 PKCE 和 nonce 完成浏览器登录
OIDC.Start;
end;
procedure TForm1.OnOIDCIDTokenEvent(Sender: TObject; const aClaims: string;
aValid: Boolean; const aError: string);
begin
if aValid then
Memo1.Lines.Text := aClaims // 包含 sub、email、name 等字段的 JSON
else
ShowMessage(aError);
end;
// uses: sgcAuth_OIDC_Client
TsgcHTTP_OIDC_Client *OIDC = new TsgcHTTP_OIDC_Client(this);
OIDC->OnOIDCIDToken = OnOIDCIDTokenEvent;
OIDC->OIDCOptions->Issuer = "https://accounts.google.com";
OIDC->OAuth2Options->ClientId = "your-client-id";
OIDC->OAuth2Options->ClientSecret = "your-client-secret";
OIDC->AuthorizationServerOptions->Scope->Clear();
OIDC->AuthorizationServerOptions->Scope->Add("openid");
OIDC->AuthorizationServerOptions->Scope->Add("profile");
OIDC->AuthorizationServerOptions->Scope->Add("email");
OIDC->LocalServerOptions->IP = "127.0.0.1";
OIDC->LocalServerOptions->Port = 8080;
OIDC->LocalServerOptions->RedirectURL = "http://127.0.0.1:8080/";
OIDC->Start();
OAuth2 客户端具备的一切功能,外加将访问令牌转化为可信身份所需的各项校验。
Discover 读取 OIDCOptions.Issuer 的提供者配置,并填充授权与令牌 URL、JWKSURI、UserInfoEndpoint 和 EndSessionEndpoint。原始 JSON 保存在 DiscoveryDocument 中。
OIDCOptions.UsePKCE 开箱即启用,每次登录都会发送一个新的 Nonce,ID 令牌必须原样返回,因此被截获的授权码或被重放的令牌都毫无用处。
会校验签名、颁发者、受众、过期时间(结合 ClockSkew)和 nonce。仅接受 RS256、RS384、RS512、ES256 和 ES384,none 和 HS 系列算法始终被拒绝。结果保存在 IDToken、IDTokenClaims 和 IDTokenValid 中。
TsgcOIDCJWKS 是提供者签名密钥的线程安全缓存。当令牌携带未知的密钥 ID 时会触发新的下载,下载频率受 RefetchInterval 限制,因此密钥轮换无需重启应用。
sgcOIDC_ValidateIDToken 使用同一个 JWKS 缓存,验证您的 REST API 或 WebSocket 服务器收到的 Bearer 令牌。OIDCOptions.AllowedTenants 可将多租户 Entra ID 应用限制为您接受的组织。
GetUserInfo 返回用户资料 JSON。回环重定向服务器、刷新令牌、DPoP、设备代码、吊销与内省等功能均来自 TsgcHTTP_OAuth2_Client。
本组件所实现标准的权威来源。
直达组件参考,获取可立即运行的演示项目,并下载试用版。
| 在线帮助:TsgcHTTP_OIDC_Client 本组件的完整属性、方法和事件参考。 | 打开 | |
| 演示项目:Demos\26.Authentication\04.OpenID_Connect 发现机制、浏览器登录、已验证的声明、userinfo 以及独立的 JWT 校验器。随 sgcWebSockets 包一起提供,请从下方下载试用版。 | 打开 | |
| 技术文档 (PDF) 仅涵盖本组件的功能、快速入门、Delphi 和 C++ Builder 代码示例及主要参考来源。 | 打开 | |
| 用户手册 (PDF) 涵盖库中每个组件的综合手册。 | 打开 | |
| 博客:使用通行密钥、SAML SSO、LDAP 和 TOTP 2FA 登录 Delphi 六个身份验证组件如何在一个 Delphi 应用中协同工作。 | 打开 |