PassKey を使用した認可

· 機能

WebAuthn(Web Authentication)は公開鍵暗号方式を使用したセキュアでパスワードレス、フィッシング耐性のある認証を実現する W3C 標準です。セキュリティとユーザーエクスペリエンスを向上させるため、パスキーと組み合わせて広く使用されています。しかし、WebAuthn でユーザーを認証することは最初のステップに過ぎません。認証成功後、複数の API エンドポイントにわたってユーザーの操作を認可する必要があります。

本記事では、以下の方法を説明します:

1. WebAuthn 認証フローの理解

WebAuthn は公開鍵暗号方式と、クライアント(ブラウザやデバイス内のパスキーなど)に安全に保存されたクレデンシャルを中心に構築されています。認証フローは一般的に以下のステップを含みます:

ステップ 1: 認証の開始 ステップ 2: クライアント側のクレデンシャルアサーション ステップ 3: サーバー側の検証

この時点で、ユーザーが誰であるかは確認できましたが、API へのアクセスを認可する方法が別途必要です。

2. WebAuthn 成功後にベアラートークンを返す

認証が成功した後にサーバーから新しい WebSocket または HTTP 接続を開くためのベアラートークンを送信させたい場合は、パラメーター token = true を渡します。例:

{
"username": "alice@example.com", "token": true
}

認証が成功すると、サーバーは以下のようなレスポンスを送信します:

{
"verified": "ok",
  "authentication": {
    "token": "C760C1C39E3D4E829693A13F18F5CFDE537B516336FC48F7BAB0276176F9E6DE"
  }
}


OnWebAuthnUnauthorized イベントはリクエストが認可されておらず切断されるときに呼び出されます。ここで、どのエンドポイントが WebAuthn 認証を必要とし、どのエンドポイントが必要としないかを設定できます。

ベアラートークンを使用する理由

3. API 認可にベアラートークンを使用する

新しいトークンを取得したら、このベアラートークンを含む authorization ヘッダーを送信するだけです。TsgcHTTP1Client の CustomHeaders プロパティを使用してベアラートークンを設定できます。例:

procedure GetHTTPRequest(const aURL: string; const aToken: string): string;
var
  oHTTP: TsgcHTTP1Client;
begin
  oHTTP := TsgcHTTP1Client.Create(nil);
  Try
    oHTTP.Request.CustomHeaders.AddValue('Authorization', 'Bearer ' + aToken);
    result := oHTTP.Get(aURL);
  Finally
    oHTTP.Free;
  End;
end; 

4. エンドツーエンドフローの概要

完全な高レベルシーケンスは以下のとおりです: