sgcAuth 機能一覧
sgcAuth でできることすべてを、2 つのクライアントコンポーネント、それらが実装するグラントタイプとクレーム、そして sgcCustomIndy と組み合わせてパックが解放する WebAuthn、TOTP、LDAP、SAML、OpenID Connect、Mail OAuth2 の各コンポーネントに対応付けて示します。すべての機能は Delphi と C++ Builder で同じように動作し、すべてのライセンスに完全なソースコードが付属します。
sgcAuth でできることすべてを、2 つのクライアントコンポーネント、それらが実装するグラントタイプとクレーム、そして sgcCustomIndy と組み合わせてパックが解放する WebAuthn、TOTP、LDAP、SAML、OpenID Connect、Mail OAuth2 の各コンポーネントに対応付けて示します。すべての機能は Delphi と C++ Builder で同じように動作し、すべてのライセンスに完全なソースコードが付属します。
5 つのグラントタイプを 1 つのコンポーネントで
署名、アタッチ、検証
sgcCustomIndy 経由のパスキー
第二要素コードとリカバリーコード
TLS 経由の Active Directory ログイン
SAML 2.0 シングルサインオン
IDトークン検証付きサインイン
SMTP、IMAP、POP3 向け OAuth2
Delphi 7 から 13、C++ Builder
sgcAuth は単体で完結しています。sgcWebSockets Core ランタイムを同梱して出荷されるため、OAuth2 と JWT のクライアントについてはアドオンではありません。
sgcWebSockets にも含まれます。OAuth2 クライアントと JWT クライアントは、いずれも sgcWebSockets の Standard エディション以上にも含まれています。All-Access にはすべてが含まれます。sgcAuth は、認証クライアントだけを必要とするチーム向けの単体パッケージです。
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 Authenticator | TsgcTOTPAuthenticator | 第二要素を確認 | 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 OAuth2 | TsgcMailOAuth2 | メールを認証 | Microsoft 365 と Gmail のアクセス・リフレッシュトークンに加え、SMTP、IMAP、POP3 向けの SASL XOAUTH2 / OAUTHBEARER 文字列です。 |
TsgcHTTP_OAuth2_Client は OAuth 2.0(RFC 6749)をエンドツーエンドでカバーします。フローを開始し、リダイレクトを受け取り、コードをトークンに交換し、その後のトークンを管理します。
| 機能 | API | 備考 |
|---|---|---|
| Authorization Code | OAuth2Options.GrantType := auth2Code | クライアントシークレットを保持できる、信頼できるサーバーサイド Web アプリケーション向けの標準フローです。 |
| Authorization Code + PKCE | auth2CodePKCE(RFC 7636) | 同じフローに Proof Key for Code Exchange を加えたもので、シークレットを保持できないネイティブ・モバイル・シングルページアプリ向けです。 |
| Client Credentials | auth2ClientCredentials | ユーザーを介さないサーバー間の呼び出しです。デーモンやサービスアカウント向け。 |
| Resource Owner Password | auth2ResourceOwnerPassword | アプリケーションがユーザーのパスワードを直接受け取り、トークンに交換します。 |
| Device Code | auth2DeviceCode(RFC 8628) | 入力に制約のあるデバイス、スマート TV、メディアコンソール、IoT 向け。本人が別のデバイスで入力するユーザーコードを表示します。 |
| クライアント ID | 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 | authorization-code のリダイレクトを受け取るために起動する小さな HTTP サーバーです。既定ではポート 8080、デスクトップアプリではランダムなポートを選ぶ 0 も指定できます。 |
| フローの実行 | Start、Stop | Start がシステムブラウザを開き(またはデバイスコードを発行し)、設定したグラントを開始します。Stop はそれを中断し、ローカルリスナーを停止します。 |
| リフレッシュ | Refresh | ブラウザを再度往復させることなく、リフレッシュトークンを新しいアクセストークンに交換します。 |
| 失効 & イントロスペクト | Revoke(RFC 7009)、Introspect(RFC 7662) | トークンを無効化する、またはプロバイダー側でその状態とメタデータを照会します。 |
| DPoP | DPoPOptions、GenerateDPoPKeyPair、OnDPoPSign | トークンを鍵ペアに紐付けるプロバイダー向けの、Demonstrating Proof-of-Possession(RFC 9449)の鍵素材と署名です。 |
| HTTP トランスポート | HTTPClientOptions | token、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、kid | JOSE ヘッダーです。alg で jwtHS256/384/512、jwtRS256/384/512、jwtES256/384/512、または耐量子の jwtMLDSA44/jwtMLDSA65/jwtMLDSA87 を選択でき、追加のフィールドは Header.AddKeyValue から設定します。 |
| ペイロード / クレーム | JWTOptions.Payload.iss、sub、aud、exp、nbf、iat、jti | RFC 7519 の登録済みクレームです。カスタムクレームは Payload.AddKeyValue で追加します。 |
| 署名用の鍵素材 | JWTOptions.Algorithms.HS.Secret、RS.PrivateKey、ES.PrivateKey、MLDSA.PrivateKey | HMAC 用の共有シークレット、RSA または ECDSA 用の PEM 形式の秘密鍵、ML-DSA 用の PKCS#8 PEM で、Header.alg によって選択されます。 |
| 耐量子署名 | jwtMLDSA44、jwtMLDSA65、jwtMLDSA87 | RFC 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 Key | sgcMLDSA_ExportPublicJWK、sgcMLDSA_ExportPrivateJWK、sgcMLDSA_ImportJWK、sgcMLDSA_ImportJWKAsPEM | AKP 形式の JSON Web Key です。ML-DSA 鍵を JWKS で公開したり、プロバイダーから読み取ったりするために使用します。 |
| 自動更新 | JWTOptions.RefreshTokenAfter | 0 より大きい場合、Sign が iat を更新して exp を自動的に再計算します。0 の場合はリクエストのたびにトークンを再生成します。 |
| 単体で署名 | Sign | エンコード済みトークン(header.payload.signature)を 1 つの文字列として構築・署名・返却します。HTTP や WebSocket クライアントは不要です。 |
| クライアントにアタッチ | 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 の重要な一部ですが、このパックに登録される 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桁のコード、任意の周期です。 |
TsgcLDAPClient は、Active Directory や他の任意の LDAP ディレクトリに対してユーザーを認証し、グループを読み取る LDAP v3 クライアント(RFC 4511)です。
| 機能 | API | 備考 |
|---|---|---|
| 接続 | Host、Connect、BindDN、Password、BaseDN | ディレクトリサーバー、検索に使うサービスアカウント、ユーザー・グループ検索のベースです。 |
| LDAPS と StartTLS | Security、TLSOptions | ポート636の暗黙TLSには ldapsecLDAPS、ポート389には ldapsecStartTLS。StartTLS が拒否された場合は接続が閉じられ、平文へのフォールバックはありません。 |
| サインインモード | AuthenticationMode、UserSearchFilter | ldapamUPN、ldapamDownLevel、ldapamSearchThenBind、ldapamDN が入力された名前をバインド名に変換します。 |
| 認証 | Authenticate | ユーザー名とパスワードを1回の呼び出しで確認し、ユーザーの DN を返します。 |
| 入れ子グループ | GetUserGroups | 直接の memberOf の値、または Active Directory のルール LDAP_MATCHING_RULE_IN_CHAIN により他のグループ経由で到達するすべてのグループです。 |
| ページング検索 | Search、PageSize、SizeLimit、TimeLimit | Simple Paged Results が自動的に使用され(既定1ページ500件)、エントリと参照は TsgcLDAPEntries リストで返されます。 |
| 安全なバインド | Bind、WhoAmI、LastResultCode、LastErrorMessage | 空のパスワードを持つ DN はサーバーに問い合わせることなく拒否され、RFC 4513 の未認証バインドの抜け穴を塞ぎます。 |
| スレッド | すべての公開メソッド | 呼び出しは直列化されるため、単一インスタンスでマルチスレッドの HTTP サーバーや WebSocket サーバーのログイン要求を処理できます。 |
TsgcSAMLServiceProvider は、Delphi の Web アプリケーションを Microsoft Entra ID、Okta、AD FS、Google Workspace、Keycloak などのIDプロバイダー向けの SAML 2.0 サービスプロバイダーにします。
| 機能 | API | 備考 |
|---|---|---|
| サービスプロバイダーのID | EntityID、AssertionConsumerServiceURL | エンティティIDと、ブラウザが返送するレスポンスを受け取る ACS URL です。 |
| メタデータの双方向対応 | GetMetadata、LoadIdPMetadata | GetMetadata は 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起点のサインインは有効化するまで無効です。 |
| 結果 | TsgcSAMLResult | NameID、NameIDFormat、SessionIndex、AuthnInstant、フレンドリー名付きの Attributes、読みやすい ErrorMessage です。 |
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 と nonce | OIDCOptions.UsePKCE、Nonce | PKCE は既定で有効で、サインインのたびに新しい nonce が送信され、IDトークンで照合されます。 |
| IDトークン検証 | IDToken、IDTokenClaims、IDTokenValid、OnOIDCIDToken | 署名、発行者、対象者、(ClockSkew を考慮した)有効期限、nonce が検証されます。受け入れるのは RS256、RS384、RS512、ES256、ES384 のみで、none と HS系アルゴリズムは常に拒否されます。 |
| 鍵ローテーション | TsgcOIDCJWKS、RefetchInterval | プロバイダーの署名鍵をキャッシュするスレッドセーフなキャッシュです。未知のキーIDにより再ダウンロードが行われるため、鍵のローテーションに再起動は不要です。 |
| サーバー側での検証 | sgcOIDC_ValidateIDToken、OIDCOptions.AllowedTenants | REST API や WebSocket サーバーが受け取るベアラートークンを同じ鍵キャッシュに対して検証し、マルチテナントの Entra ID アプリを許可する組織だけに制限します。 |
| Userinfo | GetUserInfo | サインイン済みユーザーのプロフィールJSONを返します。 |
TsgcMailOAuth2 は、Microsoft 365 と Gmail のメールが要求するトークンを取得・更新し、メールクライアントが送信する SASL XOAUTH2 と OAUTHBEARER(RFC 7628)の文字列に変換します。
| 機能 | API | 備考 |
|---|---|---|
| プロバイダープリセット | Provider、TenantId、ClientId | 正しいエンドポイントを備えた mopMicrosoft365 または mopGmail。mopCustom は CustomAuthURL、CustomTokenURL、CustomDeviceAuthorizationURL、CustomScope を受け取ります。 |
| プロトコルから決まるスコープ | Protocols、GetScope | mpSMTP、mpIMAP、mpPOP3 の任意の組み合わせが対応するスコープを要求し、Microsoft 365 では offline_access も付与されます。 |
| ブラウザまたはデバイスコード | Flow、LocalServerOptions、OnDeviceCode | mofAuthorizationCodePKCE はループバックリダイレクトでブラウザを開き、mofDeviceCode はサービスやコンソールに適しています。 |
| トークンのライフサイクル | Start、Refresh、AccessToken、RefreshToken、ExpiresAt、OnTokensChanged | Refresh はアクセストークンを同期的に更新し、OnTokensChanged が毎回発生するため、新しいリフレッシュトークンを永続化できます。 |
| SASL 文字列 | GetXOAuth2、GetOAuthBearer | AUTH XOAUTH2 と AUTH OAUTHBEARER 用の Base64 初期応答です。Raw バリアントと sgcGetXOAuth2 関数群は、デバッグや他のトークン発行元との併用に役立ちます。 |
| トランスポートを問わない設計 | HTTPClientOptions | このコンポーネントはメール接続を一切開きません。Indy の TIdSMTP、TIdIMAP4、TIdPOP3、または生の SASL コマンドを送信できる任意のメールライブラリを使用できます。 |
標準化された仕様と、対応するすべてのコンパイラで共通のソースです。
| 項目 | 内容 |
|---|---|
| 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 ランタイムを同梱し、完全なソースコードが含まれます。 |