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

公開日: 2025 年 1 月 15 日

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

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

互換性

Browser Support

  • Chrome: 133.
  • Edge: 133.
  • Firefox: 135.
  • Safari: 17.4.

Source

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 拡張機能識別子を参照してください。

その他の情報

パスキーの詳細については、パスキーによるパスワードなしのログインをご覧ください。