Delphi SAML Tek Oturum Açma

Delphi web uygulamanızı kurumsal kimlik sağlayıcınıza bağlayın. Kullanıcılar Microsoft Entra ID, Okta, AD FS, Google Workspace veya Keycloak ile bir kez oturum açar; sunucunuz imzalı, tamamen doğrulanmış bir kimlik alır.

TsgcSAMLServiceProvider

SAML 2.0 Web Tarayıcı SSO profilinin hizmet sağlayıcı tarafını uygular: AuthnRequest'i oluşturur, SP meta verisini yayınlar ve tarayıcının geri gönderdiği imzalı yanıtı doğrular. URL'leri TsgcWebSocketHTTPServer veya TsgcHTTPServer gibi herhangi bir HTTP sunucusunda barındırın.

Bileşen sınıfı

TsgcSAMLServiceProvider (sgcAuth_SAML_SP birimi)

Protokol

SAML 2.0 (OASIS)

Platformlar

Windows, macOS, Linux, iOS, Android

Sürüm

Enterprise ve All-Access, ayrıca sgcAuth paketi. sgcWebSockets .NET içinde de mevcuttur.

Üç URL ve tek bir doğrulama çağrısı

EntityID ve AssertionConsumerServiceURL'yi ayarlayın, IdP meta verisini yükleyin, ardından meta veriyi, oturum açma yönlendirmesini ve Assertion Consumer Service'i HTTP işleyicinizden sunun.

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;

İçeriğinde neler var

Bağlanması kolay ve kabul ettikleri konusunda katı bir hizmet sağlayıcı, çünkü bir SAML hatası bir oturum açma atlatmasıdır.

Her iki yönde meta veri

GetMetadata, kimlik sağlayıcıya kaydedilecek SP meta verisini üretir. LoadIdPMetadata, IdP meta verisini okur ve IdPEntityID, IdPSSOURL, IdPSSOBinding ile IdPCertificates'i doldurur.

Redirect ve POST bağlamaları

GetAuthnRequestRedirectURL, sıkıştırılmış AuthnRequest ile HTTP-Redirect URL'sini döndürür; GetAuthnRequestPostForm ise otomatik gönderilen bir HTTP-POST formu. SignAuthnRequests, bunları SPCertificate ve SPPrivateKey ile imzalar.

Yalnızca güvenilir anahtarlar

İmzalar yalnızca IdPCertificates'e karşı denetlenir; mesaja gömülü bir sertifikaya asla güvenilmez. Özel kanonikleştirme ile RSA-SHA256, RSA-SHA384 ve RSA-SHA512. AllowSHA1 ayarlanmadıkça SHA-1 reddedilir.

İmza sarmalama koruması

Yanıt, doğrudan alt öğe olarak tam olarak bir assertion içermelidir ve imza tam olarak o öğeye başvurmalıdır; bu, birçok SAML kütüphanesini kırmış olan XML imza sarmalama saldırılarını etkisiz kılar.

Tam assertion denetimleri

ProcessResponse; issuer, audience, destination, InResponseTo değerlerini ve ClockSkew ile MaxAssertionAge ile geçerlilik penceresini doğrular, ayrıca assertion kimliklerinin bir tekrar oynatma önbelleğini tutar. IdP tarafından başlatılan oturum açma, AllowIdPInitiated'ı ayarlayana kadar kapalı kalır.

Temiz sonuç nesnesi

TsgcSAMLResult; NameID, NameIDFormat, SessionIndex, AuthnInstant, dostça adlarıyla Attributes ve bir şeyler yanlış gittiğinde okunabilir bir ErrorMessage döndürür.

Spesifikasyonlar ve referanslar

Bu bileşenin uyguladığı standartlar için yetkili kaynaklar.

Belgeler ve Demolar

Bileşen referansına doğrudan bağlanın, kullanıma hazır demo projesini alın ve denemeyi indirin.

Çevrimiçi Yardım: TsgcSAMLServiceProvider Bu bileşen için tam özellik, metot ve olay referansı.
Demo Projesi: Demos\26.Authentication\03.SAML_ServiceProvider Bir TsgcWebSocketHTTPServer üzerinde login, ACS ve meta veri URL'leriyle eksiksiz bir hizmet sağlayıcı. sgcWebSockets paketi içinde gelir, denemeyi aşağıdan indirin.
Teknik Belge (PDF) Delphi ve C++ Builder için özellikler, hızlı başlangıç, kod örnekleri ve yalnızca bu bileşene ait birincil kaynak referansları.
Kullanıcı Kılavuzu (PDF) Kütüphanedeki her bileşeni kapsayan kapsamlı kılavuz.
Blog: Entra ID, Okta ve AD FS ile Delphi'de SAML Tek Oturum Açma En yaygın üç kimlik sağlayıcı ile adım adım kurulum.
En avantajlı seçenek: All-AccessTüm eSeGeCe ürünleri, Premium Destek dahil, yılda €1,059'dan itibaren.
All-Access fiyatlarına bakın

SAML Tek Oturum Açma Eklemeye Hazır mısınız?

Ücretsiz denemeyi indirin ve Delphi web uygulamanızı müşterilerinizin zaten kullandığı kimlik sağlayıcıya bağlayın.