💋

WebAuthn の get() と create() のレスポンス一覧(Level 3)

2022/07/31に公開

WebAuthn で get()、create() したときに返ってくる PublicKeyCredential についてまとめてみました。

Web Authentication: An API for accessing Public Key Credentials Level 3 Editor’s Draft, 27 July 20225. Web Authentication API を参考にしています。
説明は要点を絞っているので正確な内容は 仕様 を参照ください。

PublicKeyCredential

PublicKeyCredentialCredential を継承しています。

フィールド名/メソッド定義 説明
id USVString Credential をオーバーライドしている。この PublicKeyCredential の識別子。rawId を base64url encoding したもの。
rawId ArrayBuffer 認証器によって選択された credential ID
type DOMString 'public-key'
response AuthenticatorResponse 公開鍵クレデンシャルの作成 / 認証アサーションの生成リクエストに対する認証器のレスポンス。create() の場合 AuthenticatorAttestationResponse に、get() の場合 AuthenticatorAssertionResponse となる。
authenticatorAttachment USVString 'plat-form' / 'cross-platform'
AuthenticationExtensionsClientOutputs getClientExtensionResults() method Relying Party にリクエストされた Client Extension を処理した結果。
static Promise<boolean> isConditionalMediationAvailable() method Credential をオーバーライドしている。conditional user mediation が利用可能かどうかを返す。options.meditation に conditional を指定する場合、事前にこのメソッドを使って利用可能か確認すべき。このメソッドが存在しない場合、conditional user mediation は利用できない。(参考: https://github.com/w3c/webauthn/wiki/Explainer:-WebAuthn-Conditional-UI#api-layer)
PublicKeyCredentialJSON toJSON() method RegistrationResponseJSONAuthenticationResponseJSON を返す。これらは PublicKeyCredential の JSON 表現となり、Relying Party のサーバーに application/json ペイロードで送信するのに適している。

AuthenticatorAttestationResponse

AuthenticatorAttestationResponseAuthenticatorResponse を継承しています。

フィールド名/メソッド定義 説明
clientDataJSON ArrayBuffer クライアントから認証器に渡された client data の JSON 表現。JSON のフィールドは CollectedClientData を参照。
attestationObject ArrayBuffer attestation object。認証器そのものを担保するための情報、ユーザーが認証に使う公開鍵、ユーザーが認証器とどのようなインタラクションをしたか、といった情報が含まれる。詳細なフォーマットは attestation object を参照。
sequence<DOMString> getTransports() method 認証器がサポートしている transport のリスト。この情報がが利用できない場合空になる。AuthenticatorTransport のメンバーであるべきだが、そうでない場合も Relying Party は受け入れるべきである。
ArrayBuffer getAuthenticatorData() method attestationObject 内の authenticator data を返す。 詳細は5.2.1.1. Easily accessing credential data を参照。
ArrayBuffer? getPublicKey() method SubjectPublicKeyInfo として、credential public key を返す。詳細は5.2.1.1. Easily accessing credential data を参照。
COSEAlgorithmIdentifier getPublicKeyAlgorithm() method 新しいクレデンシャルの COSEAlgorithmIdentifier を返す。詳細は5.2.1.1. Easily accessing credential data を参照。

AuthenticatorAssertionResponse

AuthenticatorAssertionResponseAuthenticatorResponse を継承しています。

フィールド名/メソッド定義 説明
clientDataJSON ArrayBuffer クライアントから認証器に渡された client data の JSON 表現。JSON のフィールドは CollectedClientData を参照。
authenticatorData ArrayBuffer 認証器が返した authenticator datahttps://w3c.github.io/webauthn/#sctn-authenticator-data を参照。
signature ArrayBuffer 認証器が返した署名。§ 6.3.3 The authenticatorGetAssertion Operation を参照。
userHandle ArrayBuffer? 認証器が返した user handle§ 6.3.3 The authenticatorGetAssertion Operation を参照。

CollectedClientData

フィールド名/メソッド定義 説明
type DOMString 'webauthn.create' / 'webauthn.get'
challenge DOMString Base64 エンコードされた Relying Party に渡されたチャレンジ
origin DOMString クライアントが認証器に渡したオリジン。
crossOrigin boolean

RegistrationResponseJSON

各フィールドの説明は PublicKeyCredential を参照。

フィールド名/メソッド定義 説明
id Base64URLString
rawId Base64URLString
reseponse AuthenticatorAttestationResponseJSON
authenticatorAttachment DOMString?
clientExtensionResults AuthenticationExtensionsClientOutputsJSON
type DOMString

AuthenticatorAttestationResponseJSON

各フィールドの説明は AuthenticatorAttestationResponse を参照。

フィールド名/メソッド定義 説明
clientDataJSON Base64URLString
attestationObject Base64URLString
transports sequence<DOMString>

AuthenticationResponseJSON

各フィールドの説明は PublicKeyCredential を参照。

フィールド名/メソッド定義 説明
id Base64URLString
rawId Base64URLString
reseponse AuthenticatorAssertionResponseJSON
authenticatorAttachment DOMString?
clientExtensionResults AuthenticationExtensionsClientOutputsJSON
type DOMString

AuthenticatorAssertionResponseJSON

各フィールドの説明は AuthenticatorAssertionResponse を参照。

フィールド名/メソッド定義 説明
clientDataJSON Base64URLString
authenticatorData Base64URLString
signature Base64URLString
userHandle Base64URLString
GitHubで編集を提案

Discussion