Delphi SAML 단일 로그인

Delphi 웹 애플리케이션을 기업 ID 공급자에 연결하세요. 사용자는 Microsoft Entra ID, Okta, AD FS, Google Workspace, Keycloak으로 한 번만 로그인하고, 서버는 서명되어 완전히 검증된 신원 정보를 받아요.

TsgcSAMLServiceProvider

SAML 2.0 Web Browser SSO 프로필의 서비스 제공자 측을 구현해요. AuthnRequest를 만들고, SP 메타데이터를 게시하고, 브라우저가 전달하는 서명된 응답을 검증해요. URL은 TsgcWebSocketHTTPServer나 TsgcHTTPServer 같은 모든 HTTP 서버에서 호스팅할 수 있어요.

컴포넌트 클래스

TsgcSAMLServiceProvider (유닛 sgcAuth_SAML_SP)

프로토콜

SAML 2.0 (OASIS)

플랫폼

Windows, macOS, Linux, iOS, Android

에디션

Enterprise와 All-Access, 그리고 sgcAuth 팩이에요. sgcWebSockets .NET에서도 제공해요.

URL 세 개와 검증 호출 하나

EntityID와 AssertionConsumerServiceURL을 설정하고, IdP 메타데이터를 불러온 다음, HTTP 핸들러에서 메타데이터, 로그인 리디렉션, Assertion Consumer Service를 제공하세요.

uses
  sgcAuth_SAML_SP;

// SAML은 폼 필드예요: 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';
  // IdP의 entity ID, SSO URL, 바인딩, 서명 인증서
  SAML.LoadIdPMetadata(aIdPMetadataXML);
end;

// GET /saml/metadata: SAML.GetMetadata를 반환하고 IdP에 등록해요

// GET /saml/login: 브라우저를 IdP로 리디렉션해요
function TForm1.LoginURL(const aRelayState: string;
  out aRequestID: string): string;
begin
  // 이 RelayState의 aRequestID를 보관해요, ACS에서 필요해요
  Result := SAML.GetAuthnRequestRedirectURL(aRelayState, aRequestID);
end;

// POST /saml/acs: 브라우저가 전달한 서명된 응답을 검증해요
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 // 그 외 oResult.Attributes와 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;

내부 구성

연결하기 쉬우면서도 허용하는 것에는 엄격한 서비스 제공자예요. SAML의 버그는 곧 로그인 우회로 이어지니까요.

양방향 메타데이터

GetMetadata는 ID 공급자에 등록할 SP 메타데이터를 생성해요. LoadIdPMetadata는 IdP 메타데이터를 읽어 IdPEntityID, IdPSSOURL, IdPSSOBinding, IdPCertificates를 채워요.

Redirect와 POST 바인딩

GetAuthnRequestRedirectURL은 압축된 AuthnRequest를 담은 HTTP-Redirect URL을 반환하고, GetAuthnRequestPostForm은 자동 제출되는 HTTP-POST 폼을 반환해요. SignAuthnRequestsSPCertificateSPPrivateKey로 이를 서명해요.

신뢰된 키만 사용

서명은 오직 IdPCertificates에 대해서만 검증하며, 메시지에 포함된 인증서는 절대 신뢰하지 않아요. RSA-SHA256, RSA-SHA384, RSA-SHA512와 배타적 정규화를 지원하며, AllowSHA1을 설정하지 않으면 SHA-1은 거부돼요.

서명 래핑 공격 방지

응답에는 직접적인 자식으로 어설션이 정확히 하나만 있어야 하며, 서명은 반드시 그 요소를 참조해야 해요. 이는 여러 SAML 라이브러리를 무너뜨린 XML 서명 래핑 공격을 막아줘요.

완전한 어설션 검증

ProcessResponse는 발급자, 대상, 목적지, InResponseTo, 그리고 ClockSkewMaxAssertionAge에 따른 유효 기간 창을 검증하며, 어설션 ID의 재전송 방지 캐시를 유지해요. IdP가 시작하는 로그인은 AllowIdPInitiated를 설정하기 전까지 꺼져 있어요.

깔끔한 결과 객체

TsgcSAMLResultNameID, NameIDFormat, SessionIndex, AuthnInstant, 표시 이름이 포함된 Attributes, 문제가 있을 때 읽을 수 있는 ErrorMessage를 반환해요.

사양 및 참조

이 컴포넌트가 구현하는 표준의 공식 출처예요.

문서 및 데모

컴포넌트 레퍼런스 링크, 즉시 실행 가능한 데모 프로젝트, 체험판 다운로드를 제공해요.

온라인 도움말 — TsgcSAMLServiceProvider 이 컴포넌트의 전체 속성, 메서드, 이벤트 레퍼런스예요.
Demo Project — Demos\26.Authentication\03.SAML_ServiceProvider TsgcWebSocketHTTPServer에서 로그인, ACS, 메타데이터 URL을 모두 갖춘 완전한 서비스 제공자예요. sgcWebSockets 패키지에 포함돼 있어요, 아래에서 체험판을 다운로드하세요.
기술 문서 (PDF) 이 컴포넌트만을 위한 기능, 빠른 시작, Delphi 및 C++ Builder 코드 샘플, 1차 출처 참조예요.
사용자 설명서 (PDF) 라이브러리의 모든 컴포넌트를 다루는 종합 설명서예요.
블로그 — Entra ID, Okta, AD FS로 구현하는 Delphi SAML 단일 로그인 가장 흔히 쓰이는 세 ID 공급자를 단계별로 연동하는 방법이에요.
최고의 가성비: All-Access모든 eSeGeCe 제품과 프리미엄 지원이 포함되어 연 €1,059부터 이용할 수 있어요.
All-Access 가격 보기

SAML 단일 로그인을 추가할 준비가 됐나요?

무료 체험판을 다운로드하고, 고객이 이미 사용 중인 ID 공급자에 Delphi 웹 애플리케이션을 연결하세요.