sgcAuth 機能一覧

sgcAuth でできることすべてを、2 つのクライアントコンポーネント、それらが実装するグラントタイプとクレーム、そして sgcCustomIndy と組み合わせてパックが解放する WebAuthn、TOTP、LDAP、SAML、OpenID Connect、Mail OAuth2 の各コンポーネントに対応付けて示します。すべての機能は Delphi と C++ Builder で同じように動作し、すべてのライセンスに完全なソースコードが付属します。

OAuth2

5 つのグラントタイプを 1 つのコンポーネントで

JWT

署名、アタッチ、検証

WebAuthn

sgcCustomIndy 経由のパスキー

TOTP

第二要素コードとリカバリーコード

LDAP

TLS 経由の Active Directory ログイン

SAML

SAML 2.0 シングルサインオン

OpenID Connect

IDトークン検証付きサインイン

Mail OAuth2

SMTP、IMAP、POP3 向け OAuth2

規格とプラットフォーム

Delphi 7 から 13、C++ Builder

sgcAuth は単体で完結しています。sgcWebSockets Core ランタイムを同梱して出荷されるため、OAuth2 と JWT のクライアントについてはアドオンではありません。

sgcWebSockets にも含まれます。OAuth2 クライアントと JWT クライアントは、いずれも sgcWebSockets の Standard エディション以上にも含まれています。All-Access にはすべてが含まれます。sgcAuth は、認証クライアントだけを必要とするチーム向けの単体パッケージです。

7 つのパレットコンポーネント

2 つのトークンクライアントと 5 つのIDコンポーネントが、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 トークン供給源としても機能します。
TOTP AuthenticatorTsgcTOTPAuthenticator第二要素を確認TOTP と HOTP のシークレット、otpauth QR プロビジョニング、リプレイ対策付きコード検証、ワンタイムリカバリーコードです。
LDAP クライアントTsgcLDAPClientディレクトリのパスワードを確認LDAPS または StartTLS 経由の LDAP v3 / Active Directory サインイン、入れ子グループメンバーシップ、ページング検索です。
SAML サービスプロバイダーTsgcSAMLServiceProviderシングルサインオンEntra ID、Okta、AD FS、Google Workspace、Keycloak 向けの SAML 2.0 サービスプロバイダーで、厳格な署名・アサーション検証を行います。
OpenID Connect クライアントTsgcHTTP_OIDC_Clientユーザーをサインインさせるディスカバリー、PKCE と nonce によるブラウザサインイン、プロバイダー鍵によるIDトークン検証、userinfo エンドポイントです。
Mail OAuth2TsgcMailOAuth2メールを認証Microsoft 365 と Gmail のアクセス・リフレッシュトークンに加え、SMTP、IMAP、POP3 向けの SASL XOAUTH2 / OAUTHBEARER 文字列です。

5 つのグラントタイプを 1 つのコンポーネントで

TsgcHTTP_OAuth2_Client は OAuth 2.0(RFC 6749)をエンドツーエンドでカバーします。フローを開始し、リダイレクトを受け取り、コードをトークンに交換し、その後のトークンを管理します。

機能API備考
Authorization CodeOAuth2Options.GrantType := auth2Codeクライアントシークレットを保持できる、信頼できるサーバーサイド Web アプリケーション向けの標準フローです。
Authorization Code + PKCEauth2CodePKCE(RFC 7636)同じフローに Proof Key for Code Exchange を加えたもので、シークレットを保持できないネイティブ・モバイル・シングルページアプリ向けです。
Client Credentialsauth2ClientCredentialsユーザーを介さないサーバー間の呼び出しです。デーモンやサービスアカウント向け。
Resource Owner Passwordauth2ResourceOwnerPasswordアプリケーションがユーザーのパスワードを直接受け取り、トークンに交換します。
Device Codeauth2DeviceCode(RFC 8628)入力に制約のあるデバイス、スマート TV、メディアコンソール、IoT 向け。本人が別のデバイスで入力するユーザーコードを表示します。
クライアント IDOAuth2Options.ClientId、ClientSecret、Username、Passwordお使いのプロバイダーの API 仕様に従って設定します。Username/Password は、トークンエンドポイントで Basic 認証を要求するプロバイダー向けです。
プロバイダーのエンドポイントAuthorizationServerOptions.AuthURL、TokenURL、Scope、RevocationURL、IntrospectionURLプロバイダーの OAuth2/OIDC ドキュメントに公開されている URL とスコープの一覧です。
ソーシャルプリセットTsgcHTTP_OAuth2_Client_Google、TsgcHTTP_OAuth2_Client_MicrosoftGoogle と Microsoft のエンドポイントとスコープをあらかじめ設定した、既製のディセンダントです。
ローカルリダイレクトリスナーLocalServerOptions.IP、Port、RedirectURLauthorization-code のリダイレクトを受け取るために起動する小さな HTTP サーバーです。既定ではポート 8080、デスクトップアプリではランダムなポートを選ぶ 0 も指定できます。
フローの実行Start、StopStart がシステムブラウザを開き(またはデバイスコードを発行し)、設定したグラントを開始します。Stop はそれを中断し、ローカルリスナーを停止します。
リフレッシュRefreshブラウザを再度往復させることなく、リフレッシュトークンを新しいアクセストークンに交換します。
失効 & イントロスペクトRevoke(RFC 7009)、Introspect(RFC 7662)トークンを無効化する、またはプロバイダー側でその状態とメタデータを照会します。
DPoPDPoPOptions、GenerateDPoPKeyPair、OnDPoPSignトークンを鍵ペアに紐付けるプロバイダー向けの、Demonstrating Proof-of-Possession(RFC 9449)の鍵素材と署名です。
HTTP トランスポートHTTPClientOptionstoken、revocation、introspection の各エンドポイントに POST する内部 HTTP クライアントの TLS とログ設定です。
ライフサイクルイベントOnBeforeAuthorizeCode、OnAfterAuthorizeCode、OnBeforeAccessToken、OnAfterAccessToken、OnBeforeRefreshToken、OnAfterRefreshTokenフローの各ステップの前後に対応する一対のイベントです。
エラーイベントOnErrorAccessToken、OnErrorAuthorizeCode、OnErrorRefreshToken、OnErrorRevokeToken、OnErrorIntrospectTokenフロー中の各失敗ポイントに 1 つずつ対応し、プロバイダーのエラー、説明、URI を伴います。
Device Code イベントOnDeviceCode、OnDeviceCodeExpired表示すべきユーザーコードと検証用 URI を渡し、ユーザーが時間内に認可を完了しなかった場合に発生します。

署名、アタッチ、検証

TsgcHTTP_JWT_Client は、1 つの JWTOptions プロパティを通じて RFC 7519(JSON Web Token)、RFC 7515(JWS)、RFC 7516(JWE)を実装します。

機能API備考
ヘッダーJWTOptions.Header.alg、typ、kidJOSE ヘッダーです。alg で jwtHS256/384/512、jwtRS256/384/512、jwtES256/384/512、または耐量子の jwtMLDSA44/jwtMLDSA65/jwtMLDSA87 を選択でき、追加のフィールドは Header.AddKeyValue から設定します。
ペイロード / クレームJWTOptions.Payload.iss、sub、aud、exp、nbf、iat、jtiRFC 7519 の登録済みクレームです。カスタムクレームは Payload.AddKeyValue で追加します。
署名用の鍵素材JWTOptions.Algorithms.HS.Secret、RS.PrivateKey、ES.PrivateKey、MLDSA.PrivateKeyHMAC 用の共有シークレット、RSA または ECDSA 用の PEM 形式の秘密鍵、ML-DSA 用の PKCS#8 PEM で、Header.alg によって選択されます。
耐量子署名jwtMLDSA44、jwtMLDSA65、jwtMLDSA87RFC 9964 の ML-DSA JWS アルゴリズムです。純粋な Pascal で実装されているため、この経路に OpenSSL は関与しません。クライアントは PKCS#8 PEM である JWTOptions.Algorithms.MLDSA.PrivateKey で署名します。サーバーは JWTOptions.Algorithms.MLDSA.Enabled を設定したうえで、SubjectPublicKeyInfo PEM である JWTOptions.Algorithms.MLDSA.PublicKey で検証します。
ML-DSA の JSON Web KeysgcMLDSA_ExportPublicJWK、sgcMLDSA_ExportPrivateJWK、sgcMLDSA_ImportJWK、sgcMLDSA_ImportJWKAsPEMAKP 形式の JSON Web Key です。ML-DSA 鍵を JWKS で公開したり、プロバイダーから読み取ったりするために使用します。
自動更新JWTOptions.RefreshTokenAfter0 より大きい場合、Sign が iat を更新して exp を自動的に再計算します。0 の場合はリクエストのたびにトークンを再生成します。
単体で署名Signエンコード済みトークン(header.payload.signature)を 1 つの文字列として構築・署名・返却します。HTTP や WebSocket クライアントは不要です。
クライアントにアタッチStart、Client.Authentication.Token.JWTStart が設定済みの JWT に署名し、ホストコンポーネントに Bearer トークンとして渡します。Authentication.Token.JWT に一度設定すれば、以降のすべてのリクエストが署名済みで送信されます。
対応コンポーネントTsgcWebSocketClient、TsgcHTTP1Client、TsgcHTTP2Clientいずれも Authentication.Token を通じて、TsgcHTTP_JWT_Client を Bearer トークン供給源として受け付けます。
OpenSSL 設定JWTOptions.OpenSSL_OptionsRS および ES アルゴリズムが使用する API バージョンとライブラリパスです(APIVersion、LibPath、LibPathCustom、UnixSymLinks)。

パスワードレスサインイン、もう 1 つのピースを添えて

WebAuthn は sgcAuth の重要な一部ですが、このパックに登録される 3 つ目のコンポーネントではありません。sgcWebSockets の WebAuthn サーバーが提供し、その土台に sgcCustomIndy を必要とします。

項目内容
概要W3C Web Authentication Level 2(WebAuthn): TsgcWSAPIServer_WebAuthn に支えられた、パスキーと FIDO2 セキュリティキーによるパスワードレスサインインです。
実装場所TsgcWSAPIServer_WebAuthn は sgcWebSockets Enterprise と All-Access の一部であるサーバーサイドコンポーネントで、このパックが登録するクライアントではありません。
必要なものsgcCustomIndy が sgcWebSockets Core 向けのアドオンとして提供する、パッチ済み Indy ビルドです。
追加のされ方sgcAuth を注文すると、注文ページが sgcCustomIndy を自動的にカートへ追加します。すでにライセンスをお持ちですか? チェックアウト時に項目を削除してください。どちらの場合も追加料金は発生しません。
クライアント側ブラウザ側の JavaScript アプリケーションが WebAuthn の一連の処理を進めます。sgcHTML は、サーバーと組み合わせて使える WebAuthn ログイン UI コンポーネントを既製で提供します。
パスキーユーザー名なしサインイン(ディスカバラブルな認証情報)、条件付きメディエーションによるパスキーのオートフィル、1ユーザーあたり複数のパスキー、BackupEligible と BackupState による同期型/デバイス固定型の判別、クローンされた認証器の検出です。

一度だけ受け付ける第二要素のコード

TsgcTOTPAuthenticator は、Google Authenticator、Microsoft Authenticator、他のあらゆる認証アプリが表示するコードである TOTP(RFC 6238)と HOTP(RFC 4226)を実装します。

機能API備考
シークレットGenerateSecret、SecretLength既定20バイトのランダムな Base32 シークレットで、ユーザーレコードとともに保存します。
QRプロビジョニングGetProvisioningURI、Issuer発行者、アルゴリズム、桁数、周期を含む otpauth://totp/ URI を生成し、QRコードとしてそのまま描画できます。
コードの検証VerifyCode、Window現在のタイムステップと前後 Window ステップ(既定1)を受け入れるため、端末の時計が数秒ずれていてもサインインできます。
リプレイ対策aLastTimeStep を伴う VerifyCode前回使用したステップより後のタイムステップのみを受け入れ、一致したステップを返すため、同じコードを二度使うことはできません。
HOTP カウンターGenerateHOTP、VerifyHOTPハードウェアトークン向けのカウンターベース方式で、検証成功時にカウンターを再同期する先読みウィンドウを備えます。
リカバリーコードGenerateRecoveryCodes任意の TStrings に一意なワンタイムコードを書き込みます。端末を紛失したユーザーのための予備手段です。
アルゴリズムと桁数Algorithm、Digits、Periodすべてのアプリが対応する既定の HMAC-SHA1、HMAC-SHA256、HMAC-SHA512 と、6〜8桁のコード、任意の周期です。

TLS 経由の Active Directory サインイン

TsgcLDAPClient は、Active Directory や他の任意の LDAP ディレクトリに対してユーザーを認証し、グループを読み取る LDAP v3 クライアント(RFC 4511)です。

機能API備考
接続Host、Connect、BindDN、Password、BaseDNディレクトリサーバー、検索に使うサービスアカウント、ユーザー・グループ検索のベースです。
LDAPS と StartTLSSecurity、TLSOptionsポート636の暗黙TLSには ldapsecLDAPS、ポート389には ldapsecStartTLS。StartTLS が拒否された場合は接続が閉じられ、平文へのフォールバックはありません。
サインインモードAuthenticationMode、UserSearchFilterldapamUPN、ldapamDownLevel、ldapamSearchThenBind、ldapamDN が入力された名前をバインド名に変換します。
認証Authenticateユーザー名とパスワードを1回の呼び出しで確認し、ユーザーの DN を返します。
入れ子グループGetUserGroups直接の memberOf の値、または Active Directory のルール LDAP_MATCHING_RULE_IN_CHAIN により他のグループ経由で到達するすべてのグループです。
ページング検索Search、PageSize、SizeLimit、TimeLimitSimple Paged Results が自動的に使用され(既定1ページ500件)、エントリと参照は TsgcLDAPEntries リストで返されます。
安全なバインドBind、WhoAmI、LastResultCode、LastErrorMessage空のパスワードを持つ DN はサーバーに問い合わせることなく拒否され、RFC 4513 の未認証バインドの抜け穴を塞ぎます。
スレッドすべての公開メソッド呼び出しは直列化されるため、単一インスタンスでマルチスレッドの HTTP サーバーや WebSocket サーバーのログイン要求を処理できます。

SAML 2.0 シングルサインオン

TsgcSAMLServiceProvider は、Delphi の Web アプリケーションを Microsoft Entra ID、Okta、AD FS、Google Workspace、Keycloak などのIDプロバイダー向けの SAML 2.0 サービスプロバイダーにします。

機能API備考
サービスプロバイダーのIDEntityID、AssertionConsumerServiceURLエンティティIDと、ブラウザが返送するレスポンスを受け取る ACS URL です。
メタデータの双方向対応GetMetadata、LoadIdPMetadataGetMetadata は IdP に登録する SPメタデータを生成します。LoadIdPMetadata は IdPEntityID、IdPSSOURL、IdPSSOBinding、IdPCertificates を設定します。
Redirect と POST バインディングGetAuthnRequestRedirectURL、GetAuthnRequestPostForm圧縮した AuthnRequest を含む HTTP-Redirect URL、または自動送信される HTTP-POST フォームです。
署名付きリクエストSignAuthnRequests、SPCertificate、SPPrivateKeyこれを要求するIDプロバイダー向けに AuthnRequest に署名します。
信頼された鍵のみ使用IdPCertificates、AllowSHA1署名は設定済みの IdP証明書に対してのみ検証され、メッセージに埋め込まれた証明書は決して信頼されません。RSA-SHA256、RSA-SHA384、RSA-SHA512 と排他的正規化、SHA-1 は許可した場合のみです。
署名ラッピング攻撃への対策ProcessResponseレスポンスは直接の子要素として assertion を1つだけ持つ必要があり、署名はその要素を参照している必要があります。
アサーションの検証ClockSkew、MaxAssertionAge、AllowIdPInitiated発行者、対象者、宛先、InResponseTo、有効期間が検証され、アサーションIDのリプレイキャッシュを保持します。IdP起点のサインインは有効化するまで無効です。
結果TsgcSAMLResultNameID、NameIDFormat、SessionIndex、AuthnInstant、フレンドリー名付きの Attributes、読みやすい ErrorMessage です。

任意の OpenID プロバイダーでサインイン

TsgcHTTP_OIDC_Client は OAuth2 クライアントの上に OpenID Connect Core 1.0 を実装するため、ループバックリダイレクト、リフレッシュトークン、DPoP、デバイスコード、失効、イントロスペクションがすべて利用できます。

機能API備考
ディスカバリーOIDCOptions.Issuer、Discover、DiscoveryDocumentプロバイダー構成を読み取り、認可URL、トークンURL、JWKSURI、UserInfoEndpoint、EndSessionEndpoint を設定します。
サインインStartブラウザを開き、OAuth2 クライアントのローカルリダイレクトサーバーを介して Authorization Code フローを実行します。
PKCE と nonceOIDCOptions.UsePKCE、NoncePKCE は既定で有効で、サインインのたびに新しい nonce が送信され、IDトークンで照合されます。
IDトークン検証IDToken、IDTokenClaims、IDTokenValid、OnOIDCIDToken署名、発行者、対象者、(ClockSkew を考慮した)有効期限、nonce が検証されます。受け入れるのは RS256、RS384、RS512、ES256、ES384 のみで、none と HS系アルゴリズムは常に拒否されます。
鍵ローテーションTsgcOIDCJWKS、RefetchIntervalプロバイダーの署名鍵をキャッシュするスレッドセーフなキャッシュです。未知のキーIDにより再ダウンロードが行われるため、鍵のローテーションに再起動は不要です。
サーバー側での検証sgcOIDC_ValidateIDToken、OIDCOptions.AllowedTenantsREST API や WebSocket サーバーが受け取るベアラートークンを同じ鍵キャッシュに対して検証し、マルチテナントの Entra ID アプリを許可する組織だけに制限します。
UserinfoGetUserInfoサインイン済みユーザーのプロフィールJSONを返します。

SMTP、IMAP、POP3 向け OAuth2

TsgcMailOAuth2 は、Microsoft 365 と Gmail のメールが要求するトークンを取得・更新し、メールクライアントが送信する SASL XOAUTH2 と OAUTHBEARER(RFC 7628)の文字列に変換します。

機能API備考
プロバイダープリセットProvider、TenantId、ClientId正しいエンドポイントを備えた mopMicrosoft365 または mopGmail。mopCustom は CustomAuthURL、CustomTokenURL、CustomDeviceAuthorizationURL、CustomScope を受け取ります。
プロトコルから決まるスコープProtocols、GetScopempSMTP、mpIMAP、mpPOP3 の任意の組み合わせが対応するスコープを要求し、Microsoft 365 では offline_access も付与されます。
ブラウザまたはデバイスコードFlow、LocalServerOptions、OnDeviceCodemofAuthorizationCodePKCE はループバックリダイレクトでブラウザを開き、mofDeviceCode はサービスやコンソールに適しています。
トークンのライフサイクルStart、Refresh、AccessToken、RefreshToken、ExpiresAt、OnTokensChangedRefresh はアクセストークンを同期的に更新し、OnTokensChanged が毎回発生するため、新しいリフレッシュトークンを永続化できます。
SASL 文字列GetXOAuth2、GetOAuthBearerAUTH XOAUTH2 と AUTH OAUTHBEARER 用の Base64 初期応答です。Raw バリアントと sgcGetXOAuth2 関数群は、デバッグや他のトークン発行元との併用に役立ちます。
トランスポートを問わない設計HTTPClientOptionsこのコンポーネントはメール接続を一切開きません。Indy の TIdSMTP、TIdIMAP4、TIdPOP3、または生の SASL コマンドを送信できる任意のメールライブラリを使用できます。

RFC、コンパイラ、ターゲット

標準化された仕様と、対応するすべてのコンパイラで共通のソースです。

項目内容
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)、JOSE 向け ML-DSA(RFC 9964)。
WebAuthn 標準Web Authentication Level 2(W3C)。sgcWebSockets の WebAuthn サーバー経由です。
ID標準TOTP(RFC 6238)、HOTP(RFC 4226)、LDAP v3(RFC 4511)、SAML 2.0(OASIS)、OpenID Connect Core 1.0、SASL OAUTHBEARER(RFC 7628)と XOAUTH2。
プラットフォーム両クライアントとも純粋な HTTPS とローカル署名のため、Delphi の対応プラットフォームすべてをカバーします: Windows Win32/Win64、Linux 64 ビット、macOS、iOS、Android。
コンパイラDelphi および C++ Builder 7 から 13 まで。
エディションOAuth2 クライアントと JWT クライアントは sgcWebSockets の Standard エディション以上にも含まれ、WebAuthn、TOTP、LDAP、SAML、OpenID Connect、Mail OAuth2 の各コンポーネントは Enterprise に含まれ、All-Access にはすべてが含まれます。
ライセンス単体で完結します。sgcWebSockets Core ランタイムを同梱し、完全なソースコードが含まれます。
最もお得な選択: All-AccesseSeGeCe の全製品にプレミアムサポートが付いて、年間 €1,059 からご利用いただけます。
All-Access の価格を見る

sgcAuth で開発する

無料体験版をダウンロードして、Delphi や C++ Builder から最初のアクセストークンや署名済み JWT を取得しましょう。