Cliente OpenID Connect em Delphi

Autentique usuários com Google, Microsoft Entra ID, Okta, Auth0, Keycloak ou AWS Cognito, e saiba quem eles são. O componente descobre o provedor, executa o fluxo no navegador com PKCE e nonce, e valida o token de ID que recebe de volta.

TsgcHTTP_OIDC_Client

Estende o cliente OAuth2 com a camada de identidade do OpenID Connect: discovery, PKCE e nonce por padrão, validação do token de ID em relação às chaves de assinatura do provedor, e o endpoint userinfo.

Classe do componente

TsgcHTTP_OIDC_Client (unit sgcAuth_OIDC_Client)

Plataformas

Windows, macOS, Linux, iOS, Android

Edição

Enterprise e All-Access, além do pacote sgcAuth. Também disponível no sgcWebSockets .NET.

Defina o issuer, inicie o login

Defina OIDCOptions.Issuer e as credenciais do cliente, chame Start, e leia as claims validadas em OnOIDCIDToken. O discovery é executado automaticamente quando os endpoints não estão definidos.

uses
  sgcAuth_OIDC_Client;

// OIDC é um campo do formulário: 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/';

  // discovery, depois o login no navegador com PKCE e 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 // JSON com sub, email, name...
  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();

O que está incluído

Tudo o que o cliente OAuth2 faz, mais as verificações que transformam um access token em uma identidade confiável.

Discovery

Discover lê a configuração do provedor a partir de OIDCOptions.Issuer e preenche as URLs de autorização e token, JWKSURI, UserInfoEndpoint e EndSessionEndpoint. O JSON bruto fica em DiscoveryDocument.

PKCE e nonce por padrão

OIDCOptions.UsePKCE já vem ativado e todo login envia um Nonce novo que o token de ID deve ecoar, então um código interceptado ou um token repetido não servem para nada.

Validação rigorosa do token de ID

Assinatura, issuer, audience, expiração (com ClockSkew) e nonce são conferidos. Apenas RS256, RS384, RS512, ES256 e ES384 são aceitos, none e os algoritmos HS são sempre rejeitados. Os resultados ficam em IDToken, IDTokenClaims e IDTokenValid.

Rotação de chaves resolvida

TsgcOIDCJWKS é um cache thread-safe das chaves de assinatura do provedor. Um token com um key id desconhecido dispara um novo download, limitado por RefetchInterval, então a rotação de chaves não exige reinício.

Validação no lado do servidor

sgcOIDC_ValidateIDToken valida os bearer tokens que sua API REST ou servidor WebSocket recebe, contra o mesmo cache JWKS. OIDCOptions.AllowedTenants restringe aplicações multi-tenant do Entra ID às organizações que você aceita.

Userinfo e a caixa de ferramentas OAuth2

GetUserInfo retorna o JSON de perfil. O servidor de redirecionamento loopback, refresh tokens, DPoP, device code, revogação e introspecção vêm do TsgcHTTP_OAuth2_Client.

Especificações & referências

Fontes oficiais dos padrões implementados por este componente.

Documentação & Demos

Acesse a referência do componente, obtenha o projeto de demo pronto para executar e baixe o trial.

Ajuda Online — TsgcHTTP_OIDC_Client Referência completa de propriedades, métodos e eventos deste componente.
Projeto de Demo — Demos\26.Authentication\04.OpenID_Connect Discovery, login no navegador, claims validadas, userinfo e um validador de JWT independente. Incluído no pacote sgcWebSockets — baixe o trial abaixo.
Documento Técnico (PDF) Recursos, quick start, exemplos de código para Delphi & C++ Builder e referências primárias — somente este componente.
Manual do Usuário (PDF) Manual abrangente cobrindo todos os componentes da biblioteca.
Blog: Login em Delphi com Passkeys, SAML SSO, LDAP e TOTP 2FA Como os seis componentes de autenticação se encaixam em uma única aplicação Delphi.
Melhor custo-benefício: All-AccessTodos os produtos da eSeGeCe, com Suporte Premium incluído, a partir de €1,059/ano.
Ver preços do All-Access

Pronto para Adicionar Login com OpenID Connect?

Baixe o trial gratuito e permita que seus usuários Delphi façam login com o provedor de identidade em que já confiam.