sgcAuth 기능 매트릭스
sgcAuth가 제공하는 모든 기능을, 두 클라이언트 컴포넌트와 이들이 구현하는 그랜트 타입 및 클레임, 그리고 sgcCustomIndy와 함께 이 팩이 여는 WebAuthn 기능을 기준으로 정리했습니다. 모든 기능이 Delphi와 C++ Builder에서 동일하게 동작하며, 모든 라이선스에 전체 소스 코드가 제공됩니다.
sgcAuth가 제공하는 모든 기능을, 두 클라이언트 컴포넌트와 이들이 구현하는 그랜트 타입 및 클레임, 그리고 sgcCustomIndy와 함께 이 팩이 여는 WebAuthn 기능을 기준으로 정리했습니다. 모든 기능이 Delphi와 C++ Builder에서 동일하게 동작하며, 모든 라이선스에 전체 소스 코드가 제공됩니다.
sgcAuth는 자체 완결형 제품입니다. sgcWebSockets Core 런타임이 함께 포함되어 제공되므로, OAuth2와 JWT 클라이언트를 위한 애드온이 아닙니다.
sgcWebSockets 안에도 포함되어 있습니다. OAuth2 클라이언트와 JWT 클라이언트 모두 sgcWebSockets Standard 에디션부터 함께 제공됩니다. All-Access에는 모든 것이 포함됩니다. sgcAuth는 인증 클라이언트만 필요한 팀을 위한 단독 패키지입니다.
같은 문제의 두 측면이며, SGC Auth 팔레트 페이지에 등록되어 있습니다.
| 컴포넌트 | 클래스 | 역할 | 설명 |
|---|---|---|---|
| OAuth2 클라이언트 | TsgcHTTP_OAuth2_Client | 토큰 획득 | 모든 OAuth2/OIDC 제공자를 대상으로 Authorization Code, PKCE, Client Credentials, Resource Owner Password, Device Code 그랜트를 지원하며, 로컬 리디렉션 서버가 내장되어 있습니다. |
| JWT 클라이언트 | TsgcHTTP_JWT_Client | 토큰 서명 | JSON Web Token을 생성, 서명, 검증합니다. 단독으로 사용하거나 TsgcWebSocketClient, TsgcHTTP1Client, TsgcHTTP2Client의 Bearer 토큰 소스로 사용할 수 있습니다. |
TsgcHTTP_OAuth2_Client는 OAuth 2.0(RFC 6749)을 처음부터 끝까지 지원합니다. 플로우를 시작하고, 리디렉션을 받고, 코드를 토큰으로 교환하고, 그 이후의 토큰까지 관리합니다.
| 기능 | API | 비고 |
|---|---|---|
| Authorization Code | OAuth2Options.GrantType := auth2Code | 클라이언트 시크릿을 안전하게 보관할 수 있는, 신뢰할 수 있는 서버 측 웹 애플리케이션을 위한 표준 플로우입니다. |
| Authorization Code + PKCE | auth2CodePKCE(RFC 7636) | 시크릿을 보관할 수 없는 네이티브, 모바일, 싱글 페이지 앱을 위해 코드 교환 증명 키(PKCE)를 추가한 동일한 플로우입니다. |
| Client Credentials | auth2ClientCredentials | 사용자가 개입하지 않는 서버 간 호출: 데몬과 서비스 계정입니다. |
| Resource Owner Password | auth2ResourceOwnerPassword | 애플리케이션이 사용자의 비밀번호를 직접 수집해 토큰으로 교환합니다. |
| Device Code | auth2DeviceCode(RFC 8628) | 입력이 제한된 기기, 스마트 TV, 미디어 콘솔, IoT를 위한 것으로, 사용자가 두 번째 기기에서 입력하는 코드를 보여줍니다. |
| 클라이언트 신원 | OAuth2Options.ClientId, ClientSecret, Username, Password | 제공자의 API 사양에 따라 설정합니다. Username/Password는 토큰 엔드포인트에서 Basic 인증을 요구하는 제공자를 위한 것입니다. |
| 제공자 엔드포인트 | AuthorizationServerOptions.AuthURL, TokenURL, Scope, RevocationURL, IntrospectionURL | 제공자의 OAuth2/OIDC 문서에 게시된 URL과 스코프 목록입니다. |
| 소셜 프리셋 | TsgcHTTP_OAuth2_Client_Google, TsgcHTTP_OAuth2_Client_Microsoft | Google과 Microsoft의 엔드포인트와 스코프를 미리 구성해 둔 자손 컴포넌트입니다. |
| 로컬 리디렉션 리스너 | LocalServerOptions.IP, Port, RedirectURL | 인증 코드 리디렉션을 받기 위해 컴포넌트가 시작하는 작은 HTTP 서버입니다. 기본값은 포트 8080이며, 데스크톱 앱에서는 0으로 설정해 임의의 포트를 사용할 수 있습니다. |
| 플로우 실행 | Start, Stop | Start는 시스템 브라우저를 열거나(Device Code의 경우 디바이스 코드를 발급하며) 구성된 그랜트를 시작합니다. Stop은 이를 중단하고 로컬 리스너를 닫습니다. |
| 갱신 | Refresh | 브라우저를 다시 거치지 않고 리프레시 토큰을 새 액세스 토큰으로 교환합니다. |
| 철회 & 조회 | Revoke(RFC 7009), Introspect(RFC 7662) | 토큰을 무효화하거나, 제공자에서 상태와 메타데이터를 조회합니다. |
| DPoP | DPoPOptions, GenerateDPoPKeyPair, OnDPoPSign | 토큰을 키 쌍에 바인딩하도록 요구하는 제공자를 위한 소유 증명(RFC 9449) 키 자료 및 서명입니다. |
| HTTP 전송 | HTTPClientOptions | token, revocation, introspection 엔드포인트에 POST를 보내는 내부 HTTP 클라이언트를 위한 TLS 및 로깅 설정입니다. |
| 생애 주기 이벤트 | OnBeforeAuthorizeCode, OnAfterAuthorizeCode, OnBeforeAccessToken, OnAfterAccessToken, OnBeforeRefreshToken, OnAfterRefreshToken | 플로우의 각 단계 전후에 발생하는 이벤트 쌍입니다. |
| 오류 이벤트 | OnErrorAccessToken, OnErrorAuthorizeCode, OnErrorRefreshToken, OnErrorRevokeToken, OnErrorIntrospectToken | 플로우의 각 실패 지점마다 하나씩 있으며, 제공자의 오류, 설명, URI를 함께 전달합니다. |
| Device Code 이벤트 | OnDeviceCode, OnDeviceCodeExpired | 표시할 사용자 코드와 검증 URI를 전달하며, 사용자가 제시간에 인증을 완료하지 않으면 발생합니다. |
TsgcHTTP_JWT_Client는 단일 JWTOptions 속성을 통해 RFC 7519(JSON Web Token), RFC 7515(JWS), RFC 7516(JWE)를 구현합니다.
| 기능 | API | 비고 |
|---|---|---|
| 헤더 | JWTOptions.Header.alg, typ, kid | JOSE 헤더입니다. alg는 jwtHS256/384/512, jwtRS256/384/512, jwtES256/384/512 중에서 선택하며, 추가 필드는 Header.AddKeyValue로 넣습니다. |
| 페이로드 / 클레임 | JWTOptions.Payload.iss, sub, aud, exp, nbf, iat, jti | 등록된 RFC 7519 클레임이며, 사용자 지정 클레임은 Payload.AddKeyValue로 추가합니다. |
| 서명 키 자료 | JWTOptions.Algorithms.HS.Secret, RS.PrivateKey, ES.PrivateKey | HMAC용 공유 시크릿, RSA 또는 ECDSA용 PEM 인코딩 개인 키이며, Header.alg로 선택합니다. |
| 자동 갱신 | JWTOptions.RefreshTokenAfter | 0보다 크면 Sign이 iat를 갱신하고 exp를 자동으로 재계산합니다. 0이면 매 요청마다 토큰을 새로 생성합니다. |
| 독립적으로 서명 | Sign | HTTP나 WebSocket 클라이언트 없이도 인코딩된 토큰(header.payload.signature)을 문자열 하나로 생성하고 서명해 반환합니다. |
| 클라이언트에 연결 | Start, Client.Authentication.Token.JWT | Start가 구성된 JWT에 서명해 호스트 컴포넌트에 Bearer 토큰으로 전달합니다. Authentication.Token.JWT에 한 번만 설정하면 모든 요청이 서명된 채로 나갑니다. |
| 연동 대상 | TsgcWebSocketClient, TsgcHTTP1Client, TsgcHTTP2Client | 세 컴포넌트 모두 Authentication.Token을 통해 TsgcHTTP_JWT_Client를 Bearer 토큰 소스로 받아들입니다. |
| OpenSSL 설정 | JWTOptions.OpenSSL_Options | RS 및 ES 알고리즘이 사용하는 API 버전과 라이브러리 경로입니다(APIVersion, LibPath, LibPathCustom, UnixSymLinks). |
WebAuthn은 sgcAuth 이야기의 일부이지만, 이 팩에 등록되는 세 번째 컴포넌트는 아닙니다. sgcWebSockets WebAuthn 서버가 제공하며, 그 아래에는 sgcCustomIndy가 필요합니다.
| 영역 | 내용 |
|---|---|
| 정의 | W3C Web Authentication Level 2(WebAuthn)입니다. 패스키와 FIDO2 보안 키를 이용한 패스워드 없는 로그인이며, TsgcWSAPIServer_WebAuthn이 이를 뒷받침합니다. |
| 위치 | TsgcWSAPIServer_WebAuthn은 서버 측 컴포넌트로, sgcWebSockets Enterprise/All-Access의 일부이며 이 팩이 등록하는 클라이언트가 아닙니다. |
| 필요한 것 | sgcCustomIndy가 sgcWebSockets Core용 애드온으로 제공하는 패치된 Indy 빌드가 필요합니다. |
| 추가 방식 | sgcAuth를 주문하면 주문 페이지가 sgcCustomIndy를 장바구니에 자동으로 추가합니다. 이미 라이선스를 보유하고 있다면 결제 시 해당 항목을 제거할 수 있으며, 어느 쪽이든 추가 비용은 없습니다. |
| 클라이언트 측 | 브라우저 측 JavaScript 애플리케이션이 WebAuthn 절차를 구동합니다. sgcHTML이 이 서버와 짝을 이루는 WebAuthn 로그인 UI 컴포넌트를 미리 만들어 제공합니다. |
표준 규격이며, 지원하는 모든 컴파일러에서 동일한 소스를 사용합니다.
| 영역 | 내용 |
|---|---|
| OAuth2 표준 | OAuth 2.0(RFC 6749), PKCE(RFC 7636), Device Authorization Grant(RFC 8628), Token Revocation(RFC 7009), Token Introspection(RFC 7662), DPoP(RFC 9449). |
| JWT 표준 | JSON Web Token(RFC 7519), JSON Web Signature(RFC 7515), JSON Web Encryption(RFC 7516). |
| WebAuthn 표준 | Web Authentication Level 2(W3C), sgcWebSockets WebAuthn 서버를 통해 제공됩니다. |
| 플랫폼 | 두 클라이언트 모두 순수 HTTPS와 로컬 서명이므로 모든 Delphi 플랫폼이 지원됩니다. Windows Win32/Win64, Linux 64비트, macOS, iOS, Android. |
| 컴파일러 | Delphi와 C++ Builder 7부터 13까지. |
| 에디션 | OAuth2 클라이언트와 JWT 클라이언트는 sgcWebSockets Standard 에디션부터 함께 제공되며, All-Access에는 모든 것이 포함됩니다. |
| 라이선스 | 단독 제품입니다. sgcWebSockets Core 런타임이 함께 포함되며 전체 소스 코드가 제공됩니다. |