sgcAuth 機能一覧
sgcAuth でできることすべてを、2 つのクライアントコンポーネント、それらが実装するグラントタイプとクレーム、そして sgcCustomIndy と組み合わせてパックが解放する WebAuthn の機能に対応付けて示します。すべての機能は Delphi と C++ Builder で同じように動作し、すべてのライセンスに完全なソースコードが付属します。
sgcAuth でできることすべてを、2 つのクライアントコンポーネント、それらが実装するグラントタイプとクレーム、そして sgcCustomIndy と組み合わせてパックが解放する WebAuthn の機能に対応付けて示します。すべての機能は Delphi と C++ Builder で同じように動作し、すべてのライセンスに完全なソースコードが付属します。
5 つのグラントタイプを 1 つのコンポーネントで
署名、アタッチ、検証
sgcCustomIndy 経由のパスキー
Delphi 7 から 13、C++ Builder
sgcAuth は単体で完結しています。sgcWebSockets Core ランタイムを同梱して出荷されるため、OAuth2 と JWT のクライアントについてはアドオンではありません。
sgcWebSockets にも含まれます。OAuth2 クライアントと JWT クライアントは、いずれも sgcWebSockets の Standard エディション以上にも含まれています。All-Access にはすべてが含まれます。sgcAuth は、認証クライアントだけを必要とするチーム向けの単体パッケージです。
同じ問題の 2 つの側面が、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 | クライアントシークレットを保持できる、信頼できるサーバーサイド 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 を選択でき、追加のフィールドは 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 | エンコード済みトークン(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 コンポーネントを既製で提供します。 |
標準化された仕様と、対応するすべてのコンパイラで共通のソースです。
| 項目 | 内容 |
|---|---|
| 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 ランタイムを同梱し、完全なソースコードが含まれます。 |