Delphi SAML Single Sign-On

Binden Sie Ihre Delphi-Webanwendung an den Identity Provider Ihres Unternehmens an. Benutzer melden sich einmal mit Microsoft Entra ID, Okta, AD FS, Google Workspace oder Keycloak an, und Ihr Server erhält eine signierte, vollständig validierte Identität.

TsgcSAMLServiceProvider

Implementiert die Service-Provider-Seite des SAML-2.0-Web-Browser-SSO-Profils: Sie erstellt die AuthnRequest, veröffentlicht die SP-Metadaten und validiert die signierte Antwort, die der Browser zurücksendet. Hosten Sie die URLs auf einem beliebigen HTTP-Server, etwa TsgcWebSocketHTTPServer oder TsgcHTTPServer.

Komponentenklasse

TsgcSAMLServiceProvider (Unit sgcAuth_SAML_SP)

Protokoll

SAML 2.0 (OASIS)

Plattformen

Windows, macOS, Linux, iOS, Android

Edition

Enterprise

Drei URLs und ein Validierungsaufruf

Setzen Sie EntityID und AssertionConsumerServiceURL, laden Sie die IdP-Metadaten und stellen Sie anschließend die Metadaten, die Login-Weiterleitung und den Assertion Consumer Service über Ihren HTTP-Handler bereit.

uses
  sgcAuth_SAML_SP;

// SAML is a form field: SAML: TsgcSAMLServiceProvider;
procedure TForm1.ConfigureSAML(const aIdPMetadataXML: string);
begin
  SAML := TsgcSAMLServiceProvider.Create(nil);
  SAML.EntityID := 'https://app.example.com/saml/metadata';
  SAML.AssertionConsumerServiceURL := 'https://app.example.com/saml/acs';
  // entity ID, SSO URL, binding and signing certificates of the IdP
  SAML.LoadIdPMetadata(aIdPMetadataXML);
end;

// GET /saml/metadata: return SAML.GetMetadata and register it in the IdP

// GET /saml/login: redirect the browser to the IdP
function TForm1.LoginURL(const aRelayState: string;
  out aRequestID: string): string;
begin
  // keep aRequestID for this RelayState, the ACS needs it
  Result := SAML.GetAuthnRequestRedirectURL(aRelayState, aRequestID);
end;

// POST /saml/acs: validate the signed response posted by the browser
function TForm1.ValidateResponse(const aSAMLResponse, aRelayState,
  aRequestID: string): string;
var
  oResult: TsgcSAMLResult;
begin
  oResult := TsgcSAMLResult.Create;
  try
    if SAML.ProcessResponse(aSAMLResponse, aRelayState, aRequestID, oResult) then
      Result := oResult.NameID // plus oResult.Attributes and SessionIndex
    else
      raise Exception.Create(oResult.ErrorMessage);
  finally
    oResult.Free;
  end;
end;
// uses: sgcAuth_SAML_SP
TsgcSAMLServiceProvider *SAML = new TsgcSAMLServiceProvider(this);
SAML->EntityID = "https://app.example.com/saml/metadata";
SAML->AssertionConsumerServiceURL = "https://app.example.com/saml/acs";
SAML->LoadIdPMetadata(IdPMetadataXML);

// GET /saml/login
String RequestID;
String URL = SAML->GetAuthnRequestRedirectURL(RelayState, RequestID);

// POST /saml/acs
TsgcSAMLResult *SAMLResult = new TsgcSAMLResult();
if (SAML->ProcessResponse(SAMLResponse, RelayState, RequestID, SAMLResult))
  ShowMessage(SAMLResult->NameID);
delete SAMLResult;

Was steckt drin

Ein Service Provider, der einfach einzubinden und streng bei dem ist, was er akzeptiert, denn ein SAML-Fehler ist eine Umgehung der Anmeldung.

Metadaten in beide Richtungen

GetMetadata erzeugt die SP-Metadaten zur Registrierung beim Identity Provider. LoadIdPMetadata liest die IdP-Metadaten und füllt IdPEntityID, IdPSSOURL, IdPSSOBinding und IdPCertificates.

Redirect- und POST-Bindings

GetAuthnRequestRedirectURL liefert die HTTP-Redirect-URL mit der komprimierten AuthnRequest, GetAuthnRequestPostForm ein automatisch abgesendetes HTTP-POST-Formular. SignAuthnRequests signiert sie mit SPCertificate und SPPrivateKey.

Nur vertrauenswürdige Schlüssel

Signaturen werden ausschließlich gegen IdPCertificates geprüft, ein in der Nachricht eingebettetes Zertifikat wird nie vertraut. RSA-SHA256, RSA-SHA384 und RSA-SHA512 mit exklusiver Kanonisierung. SHA-1 wird abgelehnt, sofern AllowSHA1 nicht gesetzt ist.

Schutz vor Signature Wrapping

Die Antwort darf als direktes Kind genau eine Assertion enthalten, und die Signatur muss sich auf genau dieses Element beziehen, was die XML-Signature-Wrapping-Angriffe verhindert, die viele SAML-Bibliotheken kompromittiert haben.

Vollständige Assertion-Prüfungen

ProcessResponse validiert Issuer, Audience, Destination, InResponseTo und das Gültigkeitsfenster mit ClockSkew und MaxAssertionAge und führt einen Replay-Cache der Assertion-IDs. IdP-initiiertes Login bleibt deaktiviert, bis Sie AllowIdPInitiated setzen.

Sauberes Ergebnisobjekt

TsgcSAMLResult liefert NameID, NameIDFormat, SessionIndex, AuthnInstant, die Attributes mit ihren Anzeigenamen und eine lesbare ErrorMessage, wenn etwas nicht stimmt.

Spezifikationen und Referenzen

Maßgebliche Quellen für die Standards, die diese Komponente implementiert.

Dokumentation & Demos

Springe direkt zur Komponentenreferenz, lade das einsatzbereite Demo-Projekt herunter und teste die Testversion.

Online-Hilfe — TsgcSAMLServiceProvider Vollständige Eigenschaften-, Methoden- und Ereignisreferenz für diese Komponente.
Demo-Projekt — Demos\26.Authentication\03.SAML_ServiceProvider Vollständiger Service Provider mit Login-, ACS- und Metadaten-URLs auf einem TsgcWebSocketHTTPServer. Im sgcWebSockets-Paket enthalten — lade unten die Testversion herunter.
Technisches Dokument (PDF) Funktionen, Schnellstart, Codebeispiele für Delphi & C++ Builder und Primärquellenreferenzen — nur für diese Komponente.
Benutzerhandbuch (PDF) Umfassendes Handbuch zu jeder Komponente der Bibliothek.
Blog: SAML Single Sign-On in Delphi mit Entra ID, Okta und AD FS Schritt-für-Schritt-Einrichtung mit den drei gängigsten Identity-Providern.
Bestes Preis-Leistungs-Verhältnis: All-AccessAlle eSeGeCe-Produkte, inklusive Premium-Support, ab €1,059 pro Jahr.
All-Access-Preise ansehen

Bereit für SAML Single Sign-On?

Laden Sie die kostenlose Testversion herunter und binden Sie Ihre Delphi-Webanwendung an den Identity Provider an, den Ihre Kunden bereits nutzen.