OpenID Connect w Delphi

Loguj użytkowników przez Google, Microsoft Entra ID, Okta, Auth0, Keycloak lub AWS Cognito i wiedz, kim są. Komponent wykrywa dostawcę, uruchamia przepływ w przeglądarce z PKCE i nonce oraz waliduje otrzymany token ID.

TsgcHTTP_OIDC_Client

Rozszerza klienta OAuth2 o warstwę tożsamości OpenID Connect: discovery, PKCE i nonce domyślnie, walidację tokenu ID względem kluczy podpisujących dostawcy oraz endpoint userinfo.

Klasa komponentu

TsgcHTTP_OIDC_Client (jednostka sgcAuth_OIDC_Client)

Platformy

Windows, macOS, Linux, iOS, Android

Edycja

Enterprise i All-Access, a także pakiet sgcAuth. Dostępny również w sgcWebSockets .NET.

Ustaw wydawcę, uruchom logowanie

Ustaw OIDCOptions.Issuer i dane klienta, wywołaj Start i odczytaj zwalidowane roszczenia w OnOIDCIDToken. Discovery uruchamia się automatycznie, gdy endpointy nie są ustawione.

uses
  sgcAuth_OIDC_Client;

// OIDC to pole formularza: 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, następnie logowanie w przeglądarce z PKCE i 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 z 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();

Co jest w środku

Wszystko, co robi klient OAuth2, plus weryfikacje, które zamieniają token dostępu w wiarygodną tożsamość.

Discovery

Discover odczytuje konfigurację dostawcy z OIDCOptions.Issuer i wypełnia adresy URL autoryzacji i tokenu, JWKSURI, UserInfoEndpoint i EndSessionEndpoint. Surowy JSON pozostaje w DiscoveryDocument.

PKCE i nonce domyślnie

OIDCOptions.UsePKCE jest włączone od razu, a każde logowanie wysyła świeży Nonce, który token ID musi zwrócić, więc przechwycony kod lub powtórzony token są bezużyteczne.

Rygorystyczna walidacja tokenu ID

Sprawdzane są podpis, wydawca, odbiorca, wygaśnięcie (z ClockSkew) i nonce. Akceptowane są wyłącznie RS256, RS384, RS512, ES256 i ES384, none i algorytmy HS są zawsze odrzucane. Wyniki w IDToken, IDTokenClaims i IDTokenValid.

Obsłużona rotacja kluczy

TsgcOIDCJWKS to bezpieczny wątkowo cache kluczy podpisujących dostawcy. Token z nieznanym identyfikatorem klucza wywołuje nowe pobranie, ograniczone przez RefetchInterval, więc rotacja kluczy nie wymaga restartu.

Walidacja po stronie serwera

sgcOIDC_ValidateIDToken waliduje tokeny bearer otrzymywane przez Twoje API REST lub serwer WebSocket, względem tego samego cache JWKS. OIDCOptions.AllowedTenants ogranicza wielodzierżawcze aplikacje Entra ID do akceptowanych organizacji.

Userinfo i zestaw narzędzi OAuth2

GetUserInfo zwraca JSON profilu. Lokalny serwer przekierowań, tokeny odświeżania, DPoP, kod urządzenia, unieważnianie i introspekcja pochodzą z TsgcHTTP_OAuth2_Client.

Specyfikacje i odniesienia

Autorytatywne źródła dla standardów implementowanych przez ten komponent.

Dokumentacja i dema

Przejdź do dokumentacji komponentu, pobierz gotowy projekt demo i wersję próbną.

Pomoc online — TsgcHTTP_OIDC_Client Pełna dokumentacja właściwości, metod i zdarzeń tego komponentu.
Projekt demo — Demos\26.Authentication\04.OpenID_Connect Discovery, logowanie w przeglądarce, zwalidowane roszczenia, userinfo i samodzielny walidator JWT. Dołączony do pakietu sgcWebSockets — pobierz wersję próbną poniżej.
Dokument techniczny (PDF) Funkcje, szybki start, przykłady kodu dla Delphi i C++ Builder oraz odwołania do źródeł — tylko dla tego komponentu.
Podręcznik użytkownika (PDF) Kompleksowy podręcznik obejmujący każdy komponent biblioteki.
Blog: Logowanie w Delphi z Passkeys, SAML SSO, LDAP i TOTP 2FA Jak sześć komponentów uwierzytelniania współpracuje w jednej aplikacji Delphi.
Najkorzystniejsza oferta: All-AccessWszystkie produkty eSeGeCe, ze wsparciem Premium w cenie, już od €1,059 rocznie.
Zobacz cennik All-Access

Gotowy na dodanie logowania OpenID Connect?

Pobierz bezpłatną wersję próbną i pozwól użytkownikom Delphi logować się przez dostawcę tożsamości, któremu już ufają.