getClientCapabilities() によるよりシンプルな WebAuthn 機能の検出

公開日: 2025 年 1 月 15 日

WebAuthn には、ハイブリッド プロトコル用の Bluetooth とのやり取り、パスキー プロバイダとの通信、自動入力でのパスキーの提案など、独自の機能が用意されています。ただし、クライアントや認証システムによって、WebAuthn 機能のサポートレベルは異なります。この差異により、一部のユーザーにエラーが発生したり、特定の認証オプションを使用できなくなったりするなど、ユーザー エクスペリエンスが断片化される可能性があります。デベロッパーがクライアントの機能を判断できる方法を提供することで、デベロッパーはこれらの変化に適応するより堅牢な認証フローを作成できます。

PublicKeyCredential.getClientCapabilities() メソッドを使用すると、利用者はブラウザでサポートされている WebAuthn 機能を特定できます。このメソッドは、サポートされている機能のリストを解決する Promise を返します。これにより、デベロッパーはクライアント固有の機能に基づいて認証エクスペリエンスとワークフローを調整できます。

互換性

Browser Support

  • Chrome: not supported.
  • Edge: not supported.
  • Firefox: not supported.
  • Safari: 17.4.

getClientCapabilities()

getClientCapabilities() は、利用者が利用可能な機能を決定できる WebAuthn API です。この API を使用するには、PublicKeyCredential.getClientCapabilities() を呼び出す必要があります。返された Promise は、各機能の可用性を true または false で示す機能を含んだオブジェクトに解決されます。機能が undefined の場合は、その可用性が不明であると見なします。

if (window.PublicKeyCredential &&
  if (PublicKeyCredential.getClientCapabilities) {
    const capabilities = await PublicKeyCredential.getClientCapabilities();
    if (capabilities.conditionalGet === true &&
        capabilities.passkeyPlatformAuthenticator === true) {
      // The browser supports passkeys and the conditional mediation.
    }
  }
}

conditionalCreate

ユーザーが認証情報の作成に同意している場合は、ブラウザは目立つモーダル UI なしで認証情報を作成できます。

conditionalGet

ブラウザは、目立つモーダル UI ではなく、自動入力ダイアログの一部としてパスキーを表示することで認証できます。既存の同等の値は PublicKeyCredential.isConditionalMediationAvailable() です。

hybridTransport

デバイスは Bluetooth を使用できるため、ブラウザは認証情報を作成し、ハイブリッド プロトコルを使用してクロスデバイスで認証できます。通常、ブラウザは QR コードを表示して、ユーザーがスキャンして認証情報が保存されているスマートフォンでログインできるようにします。

passkeyPlatformAuthenticator

ブラウザは認証情報を作成し、ユーザー確認プラットフォーム認証システムまたはハイブリッド プロトコルを介してそれをサポートする別のデバイスで認証できます。hybridTransport || userVerifyingPlatformAuthenticator と同じです。

relatedOrigins

ブラウザは、関連するオリジン ファイルで指定されている限り、RP ID と一致しない認証情報を作成して認証できます。

signalAllAcceptedCredentials

ブラウザはサーバーで利用可能な認証情報をパスキー プロバイダに通知できるため、パスキー プロバイダはパスキーリストをサーバーと整合させることができます。

signalCurrentUserDetails

ブラウザは、サーバー上のユーザー名や表示名などのユーザー情報をパスキー プロバイダに通知できるため、パスキー プロバイダはパスキー情報をサーバーとの整合性を保つことができます。

signalUnknownCredential

ブラウザはサーバー上の削除された認証情報をパスキー プロバイダに通知できるため、パスキー プロバイダはパスキー リストをサーバーとの整合性を保つことができます。

userVerifyingPlatformAuthenticator

ブラウザは、プラットフォーム認証システムで認証情報を作成して認証できます。これは、ブラウザがハイブリッド プロトコルをサポートしていることを意味するものではありません。既存の同等の値は PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable() です。

拡張機能

RP は getClientCapabilities() を使用して、利用可能な拡張機能を確認することもできます。

if (capabilities['extension:appid'] === true) {
  // appId extension is supported
}

識別子には extension: という接頭辞が付けられ、その後に拡張子名が続きます。拡張機能名については、IANA で定義されている WebAuthn 拡張機能識別子をご覧ください。

その他の情報

パスキーの詳細については、パスキーを使用したパスワード不要のログインをご覧ください。