WebAuthn サーバー

· 機能

sgcWebSockets 2025.4.0 Enterprise より、WebAuthn プロトコルがサポートされました(現在 BETA)。 

WebAuthn(Web 認証)は、Web 上でセキュアなパスワードレス認証を実現するために World Wide Web Consortium(W3C)と FIDO Alliance が開発した Web 標準です。より広範な FIDO2 フレームワークの一部であり、フィッシングやクレデンシャルスタッフィングなどの攻撃に脆弱な従来のパスワードへの依存を減らすことを目的としています。

WebAuthn の核心は、公開鍵暗号を使用したユーザー認証です。ユーザー名とパスワードの代わりに、ユーザーは Web アプリケーション(リライングパーティ)に一意の公開鍵・秘密鍵ペアを登録します。秘密鍵はハードウェアセキュリティキー・スマートフォン・内蔵の生体認証デバイスなどの認証器に安全に保存され、公開鍵はサーバーに保存されます。

認証時、サーバーはユーザーの秘密鍵で署名される必要があるチャレンジを発行します。署名されたチャレンジが返され、保存された公開鍵を使用して検証されることで、レスポンスの完全性と出所が保証されます。このアプローチにより、クレデンシャルの傍受や再利用が防止されます。

WebAuthn はさまざまな認証器とデバイスをサポートしており、開発者とユーザーの両方に柔軟性を提供します。また、PIN や生体認証などの他の要素と組み合わせることで多要素認証(MFA)を実現し、使いやすさを犠牲にすることなくセキュリティを大幅に向上させます。

サポートされるアテステーション形式

アテステーション形式によってデータの構造と検証方法が定義されます。一般的に使用される形式には android-key・packed・fido-u2f・apple・none などがあります。デフォルトではすべてのアテステーション形式が有効です。サポートされるアテステーション形式の一覧を以下に示します:


WebAuthn フロー


WebAuthn サーバーコンポーネント

TsgcWSAPIServer_WebAuthn コンポーネントは WebAuthn リライングパーティサーバーを実装するシンプルかつ強力なソリューションを提供し、Web アプリケーションでのパスワードレス認証を実現します。WebAuthn アプリケーションは、サーバー側の登録と認証を処理する WebAuthn サーバーと、通常は JavaScript アプリケーションであるクライアント側アプリケーションで構成されます。


以下に WebAuthn サーバーのシンプルな設定例を示します:


  // ... create the servers
  HTTPServer := TsgcWebSocketHTTPServer.Create(nil);
  WebAuthnServer := TsgcWSAPIServer_WebAuthn.Create(nil);
  WebAuthnServer.Server := HTTPServer;
  // ... enable for testing
  WebAuthnServer.EndpointsOptions.Test.Enabled := True;
  // ... WebAuthn options
  WebAuthnServer.WebAuthnOptions.RelyingParty := 'localhost';
  // ... bindings
  Server.Port := 443;
  HTTPServer.SSLOptions.Port := 443;
  HTTPServer.Bindings.Clear;
  With HTTPServer.Bindings.Add do
  begin
    Port := 443;
    IP := '127.0.0.1';
  end;
  HTTPServer.SSLOptions.Certificate := 'sgc.pem';
  HTTPServer.SSLOptions.KeyFile := 'sgc.pem';  
  HTTPServer.SSL := True;
  // ... active
  HTTPServer.Active := True; 

Delphi WebAuthn サーバーデモ

以下の Delphi WebAuthn デモでは、新しいクレデンシャルを登録し、その後ユーザーを認証する方法を示しています。