Delphi WebAuthn サーバー
Delphi サーバーにパスキーベースのパスワードレス認証を追加できます。WebAuthn Level 2 / FIDO2 の登録・認証セレモニー、アテステーション検証、認証情報ストレージフックを提供します。
Delphi サーバーにパスキーベースのパスワードレス認証を追加できます。WebAuthn Level 2 / FIDO2 の登録・認証セレモニー、アテステーション検証、認証情報ストレージフックを提供します。
WebAuthn の RP(リライングパーティ)サーバーサイドを実装しています。認証情報チャレンジの生成、navigator.credentials レスポンスの検証、アテステーションステートメントの解析、アサーション署名の検証を行います。
TsgcWSAPIServer_WebAuthn
Windows, macOS, Linux, iOS, Android
Enterprise
TsgcWebSocketHTTPServer 上に TsgcWSAPIServer_WebAuthn を配置し、WebAuthnOptions.RelyingParty を設定した後、OnWebAuthnRegistrationSuccessful で新しいパスキーを保存し、OnWebAuthnAuthenticationGetCredential でサインイン時に読み戻す処理を実装してください。
uses
sgcWebSocket, sgcWebSocket_Server_APIs, sgcWebAuthn_Classes;
// Server: TsgcWebSocketHTTPServer と WebAuthn: TsgcWSAPIServer_WebAuthn はフォームフィールドです
procedure TForm1.StartServer;
begin
Server := TsgcWebSocketHTTPServer.Create(nil);
Server.Port := 8443;
Server.SSL := True;
Server.SSLOptions.CertFile := 'server.pem';
Server.SSLOptions.KeyFile := 'server.pem';
Server.SSLOptions.Port := 8443;
WebAuthn := TsgcWSAPIServer_WebAuthn.Create(nil);
WebAuthn.Server := Server;
WebAuthn.WebAuthnOptions.RelyingParty := 'example.com';
WebAuthn.OnWebAuthnRegistrationSuccessful := OnRegistrationSuccessful;
WebAuthn.OnWebAuthnAuthenticationGetCredential := OnGetCredential;
Server.Active := True;
end;
procedure TForm1.OnRegistrationSuccessful(Sender: TObject;
const aRegistration: TsgcWebAuthn_Registration;
const aCredentialRecord: TsgcWebAuthn_CredentialRecord; var Accept: Boolean);
begin
// 新しいパスキーを自前のデータベースに保存します
SaveCredential(aCredentialRecord.CredentialId, aCredentialRecord.AsJSON);
end;
procedure TForm1.OnGetCredential(Sender: TObject; const aCredentialId: string;
const aCredentialRecord: TsgcWebAuthn_CredentialRecord; var Found: Boolean);
var
vJSON: string;
begin
// サインイン時:保存済みのパスキーを読み戻します
vJSON := LoadCredential(aCredentialId);
Found := vJSON <> '';
if Found then
aCredentialRecord.ReadJSON(vJSON);
end;
// uses: sgcWebSocket, sgcWebSocket_Server_APIs
TsgcWebSocketHTTPServer *Server = new TsgcWebSocketHTTPServer(this);
TsgcWSAPIServer_WebAuthn *WebAuthn = new TsgcWSAPIServer_WebAuthn(this);
WebAuthn->Server = Server;
WebAuthn->WebAuthnOptions->RelyingParty = "example.com";
Server->Active = true;
Delphi プロセスをパスキー対応の認証エンドポイントに変換する RP サーバーです。
OnWebAuthnRegistrationOptionsRequest が PublicKeyCredentialCreationOptions の要求を受け取り、ブラウザが navigator.credentials.create() を呼び出します。サーバーがアテステーションを検証し、OnWebAuthnRegistrationSuccessful が新しい認証情報レコードを返します。
OnWebAuthnAuthenticationOptionsRequest が保存済みの認証情報レコードで PublicKeyCredentialRequestOptions を満たし、サーバーが保存された公開鍵でアサーション署名を検証したうえで OnWebAuthnAuthenticationSuccessful を発生させます。
none、packed、fido-u2f、tpm、android-key、android-safetynet、apple のアテステーションステートメント形式をサポートしています。
認証情報ごとの signCount を追跡してクローンされた認証器を検出します。カウンターが逆行した場合、OnWebAuthnAuthenticationError がエラーを報告します。
UserVerification はセレモニーごとに required、preferred、discouraged を設定でき、検証ステップでその設定が強制されます。
OnWebAuthnAuthenticationOptionsRequest がリクエストを渡すので、進行中のログイン向けに正しい CredentialRecords を allowCredentials リストとして返せます。ストレージの設計はご自由に行えます。
このコンポーネントが実装する標準規格の公式ソースです。
パスキーは、Windows Hello、iCloud キーチェーン、Google パスワードマネージャー、またはセキュリティキーに保管されるディスカバラブルな WebAuthn 認証情報です。認証情報は自前のデータベースに保持したまま、パスキーの完全な体験をサーバーがサポートします。
ユーザー名を指定せずに認証オプションを要求します。ブラウザがそのサイト用に保持しているパスキーの一覧を表示し、ユーザーが1つを選ぶと、サーバーが返された userHandle を確認します。
条件付きメディエーションを使うと、パスキーがユーザー名フィールドのオートフィル一覧に表示されます。autocomplete="username webauthn" を追加し、/sgcWebAuthn.js の startAuthentication(options, true) を呼び出してください。
ノートPCに1つ、スマートフォンにもう1つといった形でパスキーを登録できます。1つのアカウントのすべてのパスキーは同じユーザーハンドルを共有し、認証オプションにはそのすべてが列挙されます。
認証情報レコードの BackupEligible と BackupState により、同期型のパスキーとデバイス固定型のセキュリティキーを見分けられるため、デバイスを1台しか持たないユーザーに2つ目のパスキーを提案できます。
OnWebAuthnRegistrationSuccessful でレコードを保存し、ユーザー名なしサインインやオートフィルサインインの認証情報は OnWebAuthnAuthenticationGetCredential で検索し、新しいカウンターは OnWebAuthnAuthenticationSuccessful で保存してください。
署名カウンターが前進しない場合はクローンの可能性があるとして拒否され、サインインのたびにバックアップ適格フラグが変化する場合も同様です。常に0を返す同期型パスキーは問題なく動作し続けます。
Delphi のパスキー:WebAuthn によるパスワードレスログインをお読みください。Passkeys ヘルプトピックもあわせてご覧ください。
コンポーネントリファレンスへの直接リンク、すぐに実行できるデモプロジェクトの入手、体験版のダウンロードができます。
| オンラインヘルプ — TsgcWSAPIServer_WebAuthn このコンポーネントのプロパティ、メソッド、イベントの完全なリファレンスです。 | 開く | |
| デモプロジェクト — Demos\20.HTTP_Protocol\12.WebAuthn すぐに実行できるサンプルプロジェクトです。sgcWebSockets パッケージに同梱されています。以下から体験版をダウンロードできます。 | 開く | |
| 技術ドキュメント (PDF) このコンポーネントの機能、クイックスタート、Delphi および C++ Builder 向けのコードサンプル、一次資料のリファレンスを掲載しています。 | 開く | |
| ユーザーマニュアル (PDF) ライブラリのすべてのコンポーネントを網羅した総合マニュアルです。 | 開く |