Delphi WebAuthn 서버

Delphi 서버에 패스키 기반 비밀번호 없는 인증을 추가하세요. WebAuthn Level 2 / FIDO2 등록 및 인증 의식, 증명 검증, 자격 증명 저장 훅을 제공해요.

TsgcWSAPIServer_WebAuthn

WebAuthn 의존 당사자 서버 측을 구현해요 — 자격 증명 챌린지를 생성하고, navigator.credentials 응답을 검증하고, 증명 문장을 파싱하고, 주장 서명을 검증해요.

컴포넌트 클래스

TsgcWSAPIServer_WebAuthn

프로토콜

WebAuthn Level 2 (W3C)

플랫폼

Windows, macOS, Linux, iOS, Android

에디션

Enterprise

의존 당사자 마운트 및 자격 증명 저장

TsgcWebSocketHTTPServer에 TsgcWSAPIServer_WebAuthn을 놓고, WebAuthnOptions.RelyingParty를 설정한 다음, OnWebAuthnRegistrationSuccessful로 새 패스키를 저장하고 OnWebAuthnAuthenticationGetCredential로 로그인 시 다시 불러오도록 처리하세요.

uses
  sgcWebSocket, sgcWebSocket_Server_APIs, sgcWebAuthn_Classes;

// Server: TsgcWebSocketHTTPServer, WebAuthn: TsgcWSAPIServer_WebAuthn은 폼 필드예요
procedure TForm1.StartServer;
begin
  Server := TsgcWebSocketHTTPServer.Create(nil);
  Server.Port := 8443;
  Server.SSL  := True;
  Server.SSLOptions.CertFile := 'server.pem';
  Server.SSLOptions.KeyFile  := 'server.pem';
  Server.SSLOptions.Port     := 8443;

  WebAuthn := TsgcWSAPIServer_WebAuthn.Create(nil);
  WebAuthn.Server := Server;
  WebAuthn.WebAuthnOptions.RelyingParty := 'example.com';
  WebAuthn.OnWebAuthnRegistrationSuccessful := OnRegistrationSuccessful;
  WebAuthn.OnWebAuthnAuthenticationGetCredential := OnGetCredential;

  Server.Active := True;
end;

procedure TForm1.OnRegistrationSuccessful(Sender: TObject;
  const aRegistration: TsgcWebAuthn_Registration;
  const aCredentialRecord: TsgcWebAuthn_CredentialRecord; var Accept: Boolean);
begin
  // 새 패스키를 자체 데이터베이스에 저장해요
  SaveCredential(aCredentialRecord.CredentialId, aCredentialRecord.AsJSON);
end;

procedure TForm1.OnGetCredential(Sender: TObject; const aCredentialId: string;
  const aCredentialRecord: TsgcWebAuthn_CredentialRecord; var Found: Boolean);
var
  vJSON: string;
begin
  // 로그인: 저장된 패스키를 다시 불러와요
  vJSON := LoadCredential(aCredentialId);
  Found := vJSON <> '';
  if Found then
    aCredentialRecord.ReadJSON(vJSON);
end;
// uses: sgcWebSocket, sgcWebSocket_Server_APIs
TsgcWebSocketHTTPServer *Server = new TsgcWebSocketHTTPServer(this);
TsgcWSAPIServer_WebAuthn *WebAuthn = new TsgcWSAPIServer_WebAuthn(this);
WebAuthn->Server = Server;
WebAuthn->WebAuthnOptions->RelyingParty = "example.com";
Server->Active = true;

내부 구성

Delphi 프로세스를 패스키 인식 인증 엔드포인트로 변환하는 의존 당사자 서버예요.

등록 의식

OnWebAuthnRegistrationOptionsRequest가 PublicKeyCredentialCreationOptions 요청을 받아요. 브라우저가 navigator.credentials.create()를 호출해요. 서버가 증명을 검증하고 OnWebAuthnRegistrationSuccessful이 새 자격 증명 레코드를 반환해요.

인증 의식

OnWebAuthnAuthenticationOptionsRequest가 이전에 저장된 자격 증명 레코드로 PublicKeyCredentialRequestOptions를 채워요. 서버가 저장된 공개 키로 주장 서명을 검증하고 OnWebAuthnAuthenticationSuccessful을 발생시켜요.

증명 파싱

none, packed, fido-u2f, tpm, android-key, android-safetynet, apple 증명 문장 형식을 지원해요.

카운터 검증

복제된 인증자를 감지하기 위해 자격 증명별 signCount를 추적해요. 카운터가 후퇴하면 OnWebAuthnAuthenticationError가 조치할 수 있는 오류를 보고해요.

사용자 검증

UserVerification을 의식별로 required, preferred 또는 discouraged로 설정할 수 있어요 — 검증 단계가 선택을 강제해요.

자격 증명 레코드

OnWebAuthnAuthenticationOptionsRequest가 요청을 전달해서 진행 중인 로그인의 allowCredentials 목록에 맞는 CredentialRecords를 반환할 수 있어요. 저장소 설계는 개발자의 몫이에요.

사양 및 참조

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

사용자가 기대하는 방식 그대로의 패스키

패스키는 Windows Hello, iCloud 키체인, Google 비밀번호 관리자 또는 보안 키에 보관되는 검색 가능한 WebAuthn 자격 증명이에요. 이 서버는 자격 증명을 자체 데이터베이스에 두면서도 패스키 경험을 온전히 지원해요.

사용자 이름 없는 로그인

사용자 이름 없이 인증 옵션을 요청해요. 브라우저가 해당 사이트용으로 보유한 패스키 목록을 보여주면 사용자가 하나를 선택하고, 서버가 반환된 userHandle을 확인해요.

패스키 자동 완성

조건부 중개를 사용하면 패스키가 사용자 이름 필드의 자동 완성 목록에 나타나요. autocomplete="username webauthn"을 추가하고 /sgcWebAuthn.js에서 startAuthentication(options, true)를 호출하세요.

사용자당 여러 패스키

노트북에 패스키 하나, 휴대폰에 또 다른 패스키를 등록할 수 있어요. 한 계정의 모든 패스키는 하나의 사용자 핸들을 공유하며, 인증 옵션에 그 전부가 나열돼요.

동기화형 또는 기기 종속형

자격 증명 레코드의 BackupEligible과 BackupState가 동기화형 패스키와 기기 종속형 보안 키를 구분해 주므로, 기기가 하나뿐인 사용자에게 두 번째 패스키를 제안할 수 있어요.

자체 데이터베이스 사용

OnWebAuthnRegistrationSuccessful에서 레코드를 저장하고, OnWebAuthnAuthenticationGetCredential에서 사용자 이름 없는 로그인이나 자동 완성 로그인의 자격 증명을 조회하며, OnWebAuthnAuthenticationSuccessful에서 새 카운터를 저장하세요.

복제된 인증자 탐지

서명 카운터가 앞으로 나아가지 않으면 복제 가능성으로 간주되어 거부되며, 로그인 사이에 백업 자격 플래그가 바뀌는 경우도 마찬가지예요. 항상 0을 보고하는 동기화형 패스키는 계속 정상적으로 동작해요.

Delphi의 Passkey: WebAuthn으로 구현하는 비밀번호 없는 로그인을 읽어보시고, Passkeys 도움말 항목도 확인하세요.

문서 및 데모

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

온라인 도움말 — TsgcWSAPIServer_WebAuthn 이 컴포넌트의 전체 속성, 메서드, 이벤트 레퍼런스예요.
Demo Project — Demos\20.HTTP_Protocol\12.WebAuthn 즉시 실행 가능한 예제 프로젝트예요. sgcWebSockets 패키지에 포함돼 있어요 — 아래에서 체험판을 다운로드하세요.
기술 문서 (PDF) 이 컴포넌트의 기능, 빠른 시작, Delphi 및 C++ Builder 코드 샘플, 기본 출처 참조를 포함해요.
사용자 매뉴얼 (PDF) 라이브러리의 모든 컴포넌트를 다루는 종합 매뉴얼이에요.
최고의 가성비: All-Access모든 eSeGeCe 제품과 프리미엄 지원이 포함되어 연 €1,059부터 이용할 수 있어요.
All-Access 가격 보기

패스키 인증을 추가할 준비가 됐나요?

무료 체험판을 다운로드하고 Delphi 서버에 WebAuthn / FIDO2 패스키를 도입하세요.