Web Authentication API

安全なコンテキスト用
この機能は一部またはすべての対応しているブラウザーにおいて、安全なコンテキスト (HTTPS) でのみ利用できます。

Web Authentication API は公開鍵暗号を用いて強力な認証を可能にする Credential Management API の拡張機能で、パスワードレス認証や、 SMS テキストを用いない二要素認証を実現します。

Web authentication の概念と使い方

Web Authentication API (別名 WebAuthn) は、ウェブサイトで登録、認証、二要素認証を行うためにパスワードや SMS のテキストを使用するのではなく、公開鍵暗号を使用します。これはフィッシング情報漏洩、 SMS や他の二要素認証に対する攻撃といった厄介なセキュリティ問題を解決し、同時にユーザーの利便性を向上させます (ユーザーが多くのパスワードを管理する必要がなくなるため)。

多くのウェブサイトが既にアカウントの登録や作成したアカウントにログインするウェブページを提供しています。 WebAuthn はそれらの既存のウェブページの代替または補足として機能します。 Credential Management API の他の形式と同様に、 Web Authentication API は登録とログインの2つの基本的な機能を持っています。

  • navigator.credentials.create() - publicKey オプションと併用すると、新しいアカウントの登録または既存のアカウントへの新しい非対称鍵ペアの関連付けを行うために新しい認証情報を作成します。
  • navigator.credentials.get() - publicKey オプションと併用すると、サービスに対する認証のために、ログインまたは二要素認証として既存の認証情報セットを使用します。

メモ: create() と get() は両方ともセキュアコンテキスト (例:サーバに https で接続されているか、或いは接続先のサーバがローカルホストの場合)であることを必要とし、ブラウザーがセキュアコンテキストで動作していない場合は利用できません。

最も基本的な形式では、 create() と get() は challenge と呼ばれる非常に大きな乱数をサーバーから受け取り、challenge を秘密鍵で署名してサーバーへ送り返します。この方法で秘密にすべき情報をネットワーク上に流すことなく、認証に必要な秘密鍵をユーザが所持していることをサーバに対して証明します。

create() と get() メソッドがより大局的な見地においてどのように組み込まれているかを理解するためには、それらがブラウザー外の2つのコンポーネント間にあることを理解することが重要です。

  1. サーバー - WebAuthn API はサーバー (単に"サービス"としたり、"relying party"(RP)と呼ぶこともある) に認証情報を登録し、以後ユーザー認証には同じサーバーに同じ認証情報を使うことを意図しています。
  2. 認証器(Authenticator)- 作成された認証情報は認証器と呼ばれるデバイス内に格納されます。
    これは認証における新しいコンセプトです:
    ・パスワード認証ではパスワードはユーザーの頭の中に格納され、他のデバイスは必要ありません。
    ・WebAuthn 認証ではパスワードは認証器の中に格納された鍵ペアに置き換えられています。
    認証器は Windows Hello などのように OS に組み込まれていても良いですし、 USB や Bluetooth セキュリティキーなどの物理的なトークンデバイスであっても良いです。

登録

典型的な登録過程は図1に示す6つの手順を踏みます。この図は概要説明のみを目的として、登録過程に必要なデータだけに単純化してあります。必須フィールドと任意フィールド、そして登録リクエスト作成におけるそれらのフィールドの意味は PublicKeyCredentialCreationOptions に全て記載されています。同様に、応答フィールドは PublicKeyCredential インタフェースに全て記載されています。 (ただし PublicKeyCredential.responseAuthenticatorAttestationResponse インターフェースに記載があります。)
アプリケーションを作っているほとんどの JavaScript プログラマーが唯一本当に気をつけなければならないのは、 create() が呼び出され、返り値が手に入る手順1と5のみです。しかしながら、ブラウザーと認証器の中で行われる処理やその結果のデータの意味を理解するためには手順2,3,4を理解することが不可欠です。

WebAuthn registration component and dataflow diagram

図1 - WebAuthn による登録手順と各アクションに関連する重要なデータの流れを示している

登録手順:

  1. アプリケーションが登録要求を行う - アプリケーションは最初の登録リクエストを作成します。このリクエストのプロトコルとフォーマットは WebAuthn による規定の対象範囲外です。
  2. サーバーが challenge・ユーザー情報・ Relying Party 情報を送信 - サーバーは challenge・ユーザ情報・ Relying party 情報を JavaScript プログラムに送信します。このときのプロトコルも特に指定はなく、 WebAuthn による規定の対象範囲外です。通常、サーバーは HTTPS 通信を使って REST で接続します(恐らくXMLHttpRequestFetchを用いるでしょう)が、安全なプロトコルでありさえすれば SOAPRFC 2549 、その他ほぼどのようなプロトコルを使用しても構いません。サーバーから受け取ったパラメーターは create() の呼び出し(call)に渡され、通常ほとんど或いは全く改変せずに Promise を返します。これは、 AuthenticatorAttestationResponse を含んだ PublicKeyCredential を解決するためのものです。
    次の事項は極めて重要です。
    ・challenge はランダム情報のバッファー(少なくとも16バイト以上)であること
    ・challenge は登録過程のセキュリティを確保するために必ずサーバー上で生成すること
    (Cryptographic Challenges)
  3. ブラウザーが認証器の authenticatorMakeCredential() を呼び出す - 内部的にブラウザーはパラメーターを検証し、デフォルト値を入れ、 AuthenticatorResponse.clientDataJSON となる。最も重要なパラメーターの一つは origin であり、後でサーバーがこの origin を検証できるように clientData に保存されています。 create() の呼び出しのパラメーターは clientDataJSON の SHA-256 ハッシュ値と共に認証器に渡されます。(認証器への接続が低帯域幅の NFC または Bluetooth である可能性があり、認証器は単にハッシュに署名して改ざんされていないことを保証することが目的のため、ハッシュのみを送信します)
  4. 認証器が新しい鍵ペアと Attestation を作成 - まず第一に、通常認証器は何らかの形でユーザーが存在し、登録に同意していることを確認します。この方法としては PIN の入力や指紋・虹彩認証などがあります。ユーザ確認後、認証器は非対称鍵ペアを作成し、後に使用する秘密鍵を安全に保存します。
    もう片方の公開鍵は、ある秘密鍵で署名された attestation の一部になっています。その秘密鍵とは認証器の製造過程で焼き付けられたものであり、認証局にさかのぼって検証可能な証明書チェーンをもっています。
  5. 認証器がブラウザーにデータを返す - 新しい公開鍵と世界中で重複の無い一意の認証ID、そして他の attestation 情報がブラウザーに返され、そこで attestationObject になります。
  6. ブラウザーが最終的に送信するデータを作成し、アプリケーションがその戻り値をサーバに送信 - create()  Promise が PublicKeyCredentialを解決しようとします。PublicKeyCredentialは一意の認証IDである PublicKeyCredential.rawId 持っており、 AuthenticatorResponse.clientDataJSON を含む AuthenticatorAttestationResponse や AuthenticatorAttestationResponse.attestationObject といったレスポンスと一緒にあります。この PublicKeyCredential は、何らかの望ましいフォーマットやプロトコルでサーバーに送信されます。 (注意として、 ArrayBuffer プロパティは base64 か似たようなものでエンコードされている必要があります。)
  7. サーバーが登録を検証・完了させる - 最終的に、サーバーが一連のチェックを行い、登録が完了して改ざんされていないことを保証することが要求されています。
    この保証には次の点を含む:
    1. challenge が送信時と同じものであるかの確認
    2. origin が期待された origin でとなっていることの保証
    3. clientDataHash の署名と特定モデルの認証器用の証明書チェーンを使った attestation の検証
    検証ステップの完全な一覧は WebAuthn の仕様書の中にあります。 チェックが上手くいくと、サーバはユーザーアカウントに紐づいたその新しい公開鍵を保存し、将来の利用に備えます。つまりは、ユーザーが認証のためにその公開鍵を使いたい時は何時でも使えるようにするということです。

認証

WebAuthnに登録した後、続いてユーザはサービスに認証(いわゆるログイン、サインイン)を行います。認証フローは登録フローと似ています。図2で示している認証フローは図1で示している登録フローと似ているとわかるでしょう。登録と認証の主な違いは、1) 認証ではユーザやRelying Patryの情報を必要としません。2) 登録では認証器が製造過程で焼き付けられた鍵ペアでAttestationを作成するのに対し、認証では登録時に生成された鍵ペアでAssertionを作成します。ここでも再び、以下で示す認証は概要を示すものであり、WebAuthnのすべてのオプションや機能を示すものではないことに注意してください。認証における特定のオプションについては PublicKeyCredentialRequestOptions に記載があり, 認証結果のデータにおける記載は PublicKeyCredential インターフェースにあります (ただし PublicKeyCredential.responseAuthenticatorAssertionResponse インターフェースに記載があります) .

WebAuthn authentication component and dataflow diagram

図 2 - 図 1同様、WebAuthn による認証手順と各アクションに関連する重要なデータの流れを示している

  1. アプリケーションが認証要求を行う - アプリケーションが最初の認証要求を行います。この要求のプロトコルとフォーマットはWebAuthnによる規定の対象範囲外です。
  2. サーバからのチャレンジ送信 - サーバがJavaScriptプログラムに対してチャレンジを送ります。サーバとのコミュニケーションに用いられるプロトコルに指定はなく、WebAuthnによる規定の対象範囲外です。通常、サーバーは HTTPS 通信を使って REST で接続します(恐らくXMLHttpRequestFetchを用いるでしょう)が、安全なプロトコルでありさえすれば SOAPRFC 2549 、その他ほぼどのようなプロトコルを使用しても構いません。サーバから受信したパラメータはほとんどの場合少しもしくは全く改変されずに  get() の呼び出しに渡されます。
    次の事項は極めて重要です。
    ・challenge はランダム情報のバッファー(少なくとも16バイト以上)であること
    ・challenge は登録過程のセキュリティを確保するために必ずサーバー上で生成すること
  3. ブラウザによる認証器のauthenticatorGetCredential()の呼び出し - 内部的にブラウザはパラメータを検証し、デフォルト値を埋めて AuthenticatorResponse.clientDataJSONを作成します。最も重要なパラメータの一つがoriginであり、これはclientDataの一部として記録され、後ほどサーバによって検証されます。get()呼び出し時のパラメータは、clientDataJSONのSHA-256ハッシュと一緒に認証器に渡されます。(認証器への接続が低帯域幅の NFC または Bluetooth である可能性があり、認証器は単にハッシュに署名して改ざんされていないことを保証することが目的のため、ハッシュのみを送信します)
  4. 認証器によるAssertionの生成 - 認証器がこのサービスの認証情報がRelying Party IDと一致することを確認し、ユーザに認証の同意を促します。この二つのステップが成功した場合、認証器は登録時に生成された秘密鍵を用いてclientDataHashとauthenticatorDataに署名を行うことで新しいAssertionを生成します。
  5. 認証器がブラウザにデータを返す - 認証器がauthenticatorDataとassertionの署名をブラウザに返します。
  6. ブラウザが最終的なデータを生成し、アプリケーションがサーバにレスポンスを送信するBrowser Creates Final Data, Application sends response to Server - ブラウザがAuthenticatorAssertionResponseを含むPublicKeyCredential.responseと一緒にPromisePublicKeyCredentialに解決しようとします。サーバに対してどのようなプロトコル、フォーマットでこのデータを戻すのかについてはJavaScriptアプリケーションに委ねられています。
  7. サーバによる検証と認証の完了 - 認証要求の結果を受け取り次第、サーバはレスポンスの検証を行います。この検証は以下のようなものです。
    1. Relying Party IDがこのサービスで想定しているものか
    2. 認証器によって署名されたチャレンジ、サーバによって生成されたものと一致しているか
    3. 登録要求の際に保管した、認証器による署名を検証するための公開鍵が用いられているか
    これらはWebAuthnの仕様で規定されているAssertionの検証手順のすべてです。検証が成功した場合、ユーザは認証済であると記録します。WebAuthnによる規定の対象範囲外ですが、ひとつの選択肢として新しいCookieをユーザのセッションに対して発行することが考えられます。

インターフェース

Credential 
信頼を決定づける前提条件としてのエンティティに関する情報を提供します。
CredentialsContainer
サインイン・サインアウト発動のようなイベントの際、クレデンシャル要求やユーザエージェント通知のためのメソッドをエクスポートします。このインターフェースはNavigator.credentialsからアクセス可能です。WebAuthnの仕様では、publicKey メンバーをcreate() と get() メソッドに追加し、それらのメソッドではそれぞれ、新たな鍵ペアの生成、鍵ペアについての認証取得を行います。
PublicKeyCredential
公開鍵 / 秘密鍵ペアについての情報を提供し、それはサービスへのログインのためのクレデンシャルであり、パスワードの代わりに、フィッシング耐性かつデータ漏洩体制のある非対称鍵ペアを用いています。
AuthenticatorResponse
AuthenticatorAttestationResponse  と AuthenticatorAssertionResponseに関するベースのインターフェースであり、鍵ペアについての信頼の暗号的根幹を提供します。CredentialsContainer.create() と CredentialsContainer.get()によって返され、それぞれ、その子インターフェースはチャレンジ、オリジンのようなブラウザからの情報を含んでいます。PublicKeyCredential.responseから返されるでしょう。
AuthenticatorAttestationResponse
PublicKeyCredentialが渡された時 CredentialsContainer.create()によって返され、生成された新たな鍵ペアの信頼の暗号的根幹を提供します。
AuthenticatorAssertionResponse
PublicKeyCredentialが渡された時 CredentialsContainer.get() によって返され、鍵ペアを所持しており認証要求が有効かつ承認済みであるという証拠をサービスへ提供します。

オプション

PublicKeyCredentialCreationOptions
CredentialsContainer.create() へ渡すオプション.
PublicKeyCredentialRequestOptions
CredentialsContainer.get() へ渡すオプション.

セキュリティの観点から、WebAuthn の呼び出し(例:create() や get())が保留されている間にブラウザーウィンドウのフォーカスが失われると、呼び出しはキャンセルされます。

// 登録のサンプル引数
var createCredentialDefaultArgs = {
    publicKey: {
        // Relying Party (a.k.a. - Service):
        rp: {
            name: "Acme"
        },

        // User:
        user: {
            id: new Uint8Array(16),
            name: "john.p.smith@example.com",
            displayName: "John P. Smith"
        },

        pubKeyCredParams: [{
            type: "public-key",
            alg: -7
        }],

        attestation: "direct",

        timeout: 60000,

        challenge: new Uint8Array([ // サーバーから暗号学的にランダムな値が送られていなければならない
            0x8C, 0x0A, 0x26, 0xFF, 0x22, 0x91, 0xC1, 0xE9, 0xB9, 0x4E, 0x2E, 0x17, 0x1A, 0x98, 0x6A, 0x73,
            0x71, 0x9D, 0x43, 0x48, 0xD5, 0xA7, 0x6A, 0x15, 0x7E, 0x38, 0x94, 0x52, 0x77, 0x97, 0x0F, 0xEF
        ]).buffer
    }
};

// ログインのサンプル引数
var getCredentialDefaultArgs = {
    publicKey: {
        timeout: 60000,
        // allowCredentials: [newCredential] // 下記参照
        challenge: new Uint8Array([ // サーバーから暗号学的にランダムな値が送られていなければならない
            0x79, 0x50, 0x68, 0x71, 0xDA, 0xEE, 0xEE, 0xB9, 0x94, 0xC3, 0xC2, 0x15, 0x67, 0x65, 0x26, 0x22,
            0xE3, 0xF3, 0xAB, 0x3B, 0x78, 0x2E, 0xD5, 0x6F, 0x81, 0x26, 0xE2, 0xA6, 0x01, 0x7D, 0x74, 0x50
        ]).buffer
    },
};

// 新しい認証情報の作成/登録
navigator.credentials.create(createCredentialDefaultArgs)
    .then((cred) => {
        console.log("NEW CREDENTIAL", cred);

        // 通常はサーバーから利用可能なアカウントの認証情報が送られてきますが
        // この例では上からコピーしただけです。
        var idList = [{
            id: cred.rawId,
            transports: ["usb", "nfc", "ble"],
            type: "public-key"
        }];
        getCredentialDefaultArgs.publicKey.allowCredentials = idList;
        return navigator.credentials.get(getCredentialDefaultArgs);
    })
    .then((assertion) => {
        console.log("ASSERTION", assertion);
    })
    .catch((err) => {
        console.log("ERROR", err);
    });

仕様

仕様書 ステータス コメント
Web Authentication: An API for accessing Public Key Credentials Level 1 勧告 初期定義

ブラウザの互換性

Credential

Update compatibility data on GitHub
デスクトップモバイル
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeAndroid 版 FirefoxAndroid 版 OperaiOSのSafariSamsung Internet
Credential
実験的
Chrome 完全対応 51Edge 完全対応 18Firefox 完全対応 60IE 未対応 なしOpera 完全対応 38Safari 完全対応 13WebView Android 完全対応 51Chrome Android 完全対応 51Firefox Android 完全対応 ありOpera Android 完全対応 41Safari iOS 完全対応 13.3Samsung Internet Android 完全対応 5.0
id
実験的
Chrome 完全対応 51Edge 完全対応 18Firefox 完全対応 60IE 未対応 なしOpera 完全対応 38Safari 完全対応 13WebView Android 完全対応 51Chrome Android 完全対応 51Firefox Android 完全対応 ありOpera Android 完全対応 41Safari iOS 完全対応 13.3Samsung Internet Android 完全対応 5.0
name (from CredentialUserData mixin)
実験的
Chrome 未対応 51 — 52
補足
未対応 51 — 52
補足
補足 See Bug 602980.
Edge ? Firefox 未対応 なしIE 未対応 なしOpera 未対応 38 — 39
補足
未対応 38 — 39
補足
補足 See Bug 602980.
Safari ? WebView Android 未対応 51 — 52
補足
未対応 51 — 52
補足
補足 See Bug 602980.
Chrome Android 未対応 51 — 52
補足
未対応 51 — 52
補足
補足 See Bug 602980.
Firefox Android 未対応 なしOpera Android 未対応 なしSafari iOS ? Samsung Internet Android 未対応 5.0 — 6.0
補足
未対応 5.0 — 6.0
補足
補足 See Bug 602980.
type
実験的
Chrome 完全対応 51Edge 完全対応 18Firefox 完全対応 60IE 未対応 なしOpera 完全対応 38Safari 完全対応 13WebView Android 完全対応 51Chrome Android 完全対応 51Firefox Android 完全対応 ありOpera Android 完全対応 41Safari iOS 完全対応 13.3Samsung Internet Android 完全対応 5.0

凡例

完全対応  
完全対応
未対応  
未対応
実装状況不明  
実装状況不明
実験的。動作が変更される可能性があります。
実験的。動作が変更される可能性があります。
実装ノートを参照してください。
実装ノートを参照してください。

CredentialsContainer

Update compatibility data on GitHub
デスクトップモバイル
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeAndroid 版 FirefoxAndroid 版 OperaiOSのSafariSamsung Internet
CredentialsContainer
実験的
Chrome 完全対応 51Edge 完全対応 18Firefox 完全対応 ありIE 未対応 なしOpera 未対応 なしSafari 完全対応 13WebView Android 完全対応 51Chrome Android 完全対応 51Firefox Android 完全対応 ありOpera Android 未対応 なしSafari iOS 完全対応 13.3Samsung Internet Android 完全対応 5.0
create
実験的
Chrome 完全対応 60Edge 完全対応 18Firefox 完全対応 ありIE 未対応 なしOpera 未対応 なしSafari 完全対応 13WebView Android 完全対応 60Chrome Android 完全対応 60Firefox Android 完全対応 ありOpera Android 未対応 なしSafari iOS 完全対応 13.3Samsung Internet Android 完全対応 8.0
get
実験的
Chrome 完全対応 51Edge 完全対応 18Firefox 完全対応 ありIE 未対応 なしOpera 未対応 なしSafari 完全対応 13WebView Android 完全対応 51Chrome Android 完全対応 51Firefox Android 完全対応 ありOpera Android 未対応 なしSafari iOS 完全対応 13.3Samsung Internet Android 完全対応 5.0
preventSilentAccess
実験的
Chrome 完全対応 60
完全対応 60
未対応 51 — 60
代替名
代替名 非標準の名前 requireUserMediation を使用しています。
Edge 完全対応 ≤79Firefox 完全対応 ありIE 未対応 なしOpera 未対応 なしSafari 未対応 なしWebView Android 完全対応 60
完全対応 60
未対応 51 — 60
代替名
代替名 非標準の名前 requireUserMediation を使用しています。
Chrome Android 完全対応 60
完全対応 60
未対応 51 — 60
代替名
代替名 非標準の名前 requireUserMediation を使用しています。
Firefox Android 完全対応 ありOpera Android 未対応 なしSafari iOS 未対応 なしSamsung Internet Android 完全対応 8.0
完全対応 8.0
未対応 5.0 — 8.0
代替名
代替名 非標準の名前 requireUserMediation を使用しています。
store
実験的
Chrome 完全対応 51Edge 完全対応 ≤79Firefox 完全対応 ありIE 未対応 なしOpera 未対応 なしSafari ? WebView Android 完全対応 51Chrome Android 完全対応 51Firefox Android 完全対応 ありOpera Android 未対応 なしSafari iOS ? Samsung Internet Android 完全対応 5.0

凡例

完全対応  
完全対応
未対応  
未対応
実装状況不明  
実装状況不明
実験的。動作が変更される可能性があります。
実験的。動作が変更される可能性があります。
非標準の名前を使用しています。
非標準の名前を使用しています。

PublicKeyCredential

Update compatibility data on GitHub
デスクトップモバイル
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeAndroid 版 FirefoxAndroid 版 OperaiOSのSafariSamsung Internet
PublicKeyCredentialChrome 完全対応 67
完全対応 67
完全対応 65
補足 無効
補足 Only supports USB U2F tokens.
無効 From version 65: this feature is behind the Web Authentication API preference (needs to be set to Enabled). To change preferences in Chrome, visit chrome://flags.
Edge 完全対応 18Firefox 完全対応 60
補足
完全対応 60
補足
補足 Only supports USB U2F tokens.
IE 未対応 なしOpera 未対応 なしSafari 完全対応 13WebView Android 完全対応 70Chrome Android 完全対応 70Firefox Android 完全対応 60
補足
完全対応 60
補足
補足 Only supports USB U2F tokens.
Opera Android 未対応 なしSafari iOS 完全対応 13.3Samsung Internet Android 未対応 なし
getClientExtensionResultsChrome 完全対応 67
完全対応 67
完全対応 65
補足 無効
補足 Only supports USB U2F tokens.
無効 From version 65: this feature is behind the Web Authentication API preference (needs to be set to Enabled). To change preferences in Chrome, visit chrome://flags.
Edge 完全対応 18Firefox 完全対応 60
補足
完全対応 60
補足
補足 Only supports USB U2F tokens.
IE 未対応 なしOpera 未対応 なしSafari 完全対応 13WebView Android 完全対応 70Chrome Android 完全対応 70Firefox Android 完全対応 60
補足
完全対応 60
補足
補足 Only supports USB U2F tokens.
Opera Android 未対応 なしSafari iOS 完全対応 13.3Samsung Internet Android 未対応 なし
isUserVerifyingPlatformAuthenticatorAvailableChrome 完全対応 67
完全対応 67
完全対応 65
補足 無効
補足 Only supports USB U2F tokens.
無効 From version 65: this feature is behind the Web Authentication API preference (needs to be set to Enabled). To change preferences in Chrome, visit chrome://flags.
Edge 完全対応 18Firefox 完全対応 60
補足
完全対応 60
補足
補足 Only supports USB U2F tokens.
IE 未対応 なしOpera 未対応 なしSafari 完全対応 13WebView Android 完全対応 70Chrome Android 完全対応 70Firefox Android 完全対応 60
補足
完全対応 60
補足
補足 Only supports USB U2F tokens.
Opera Android 未対応 なしSafari iOS 完全対応 13.3Samsung Internet Android 未対応 なし
rawIdChrome 完全対応 67
完全対応 67
完全対応 65
補足 無効
補足 Only supports USB U2F tokens.
無効 From version 65: this feature is behind the Web Authentication API preference (needs to be set to Enabled). To change preferences in Chrome, visit chrome://flags.
Edge 完全対応 18Firefox 完全対応 60
補足
完全対応 60
補足
補足 Only supports USB U2F tokens.
IE 未対応 なしOpera 未対応 なしSafari 完全対応 13WebView Android 完全対応 70Chrome Android 完全対応 70Firefox Android 完全対応 60
補足
完全対応 60
補足
補足 Only supports USB U2F tokens.
Opera Android 未対応 なしSafari iOS 完全対応 13.3Samsung Internet Android 未対応 なし
responseChrome 完全対応 67
完全対応 67
完全対応 65
補足 無効
補足 Only supports USB U2F tokens.
無効 From version 65: this feature is behind the Web Authentication API preference (needs to be set to Enabled). To change preferences in Chrome, visit chrome://flags.
Edge 完全対応 18Firefox 完全対応 60
補足
完全対応 60
補足
補足 Only supports USB U2F tokens.
IE 未対応 なしOpera 未対応 なしSafari 完全対応 13WebView Android 完全対応 70Chrome Android 完全対応 70Firefox Android 完全対応 60
補足
完全対応 60
補足
補足 Only supports USB U2F tokens.
Opera Android 未対応 なしSafari iOS 完全対応 13.3Samsung Internet Android 未対応 なし

凡例

完全対応  
完全対応
未対応  
未対応
実装ノートを参照してください。
実装ノートを参照してください。
ユーザーが明示的にこの機能を有効にしなければなりません。
ユーザーが明示的にこの機能を有効にしなければなりません。

AuthenticatorResponse

Update compatibility data on GitHub
デスクトップモバイル
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeAndroid 版 FirefoxAndroid 版 OperaiOSのSafariSamsung Internet
AuthenticatorResponseChrome 完全対応 67
完全対応 67
完全対応 65
補足 無効
補足 Only supports USB U2F tokens.
無効 From version 65: this feature is behind the Web Authentication API preference (needs to be set to Enabled). To change preferences in Chrome, visit chrome://flags.
Edge 完全対応 18Firefox 完全対応 60
補足
完全対応 60
補足
補足 Only supports USB U2F tokens.
IE 未対応 なしOpera 未対応 なしSafari 完全対応 13WebView Android 完全対応 70Chrome Android 完全対応 70Firefox Android 完全対応 60
補足
完全対応 60
補足
補足 Only supports USB U2F tokens.
Opera Android 未対応 なしSafari iOS 完全対応 13.3Samsung Internet Android 未対応 なし
clientDataJSONChrome 完全対応 67
完全対応 67
完全対応 65
補足 無効
補足 Only supports USB U2F tokens.
無効 From version 65: this feature is behind the Web Authentication API preference (needs to be set to Enabled). To change preferences in Chrome, visit chrome://flags.
Edge 完全対応 18Firefox 完全対応 60
補足
完全対応 60
補足
補足 Only supports USB U2F tokens.
IE 未対応 なしOpera 未対応 なしSafari 完全対応 13WebView Android 完全対応 70Chrome Android 完全対応 70Firefox Android 完全対応 60
補足
完全対応 60
補足
補足 Only supports USB U2F tokens.
Opera Android 未対応 なしSafari iOS 完全対応 13.3Samsung Internet Android 未対応 なし

凡例

完全対応  
完全対応
未対応  
未対応
実装ノートを参照してください。
実装ノートを参照してください。
ユーザーが明示的にこの機能を有効にしなければなりません。
ユーザーが明示的にこの機能を有効にしなければなりません。

AuthenticatorAttestationResponse

Update compatibility data on GitHub
デスクトップモバイル
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeAndroid 版 FirefoxAndroid 版 OperaiOSのSafariSamsung Internet
AuthenticatorAttestationResponseChrome 完全対応 67
完全対応 67
完全対応 65
補足 無効
補足 Only supports USB U2F tokens.
無効 From version 65: this feature is behind the Web Authentication API preference (needs to be set to Enabled). To change preferences in Chrome, visit chrome://flags.
Edge 完全対応 18Firefox 完全対応 60
補足
完全対応 60
補足
補足 Only supports USB U2F tokens.
IE 未対応 なしOpera 未対応 なしSafari 完全対応 13WebView Android 完全対応 70Chrome Android 完全対応 70Firefox Android 完全対応 60
補足
完全対応 60
補足
補足 Only supports USB U2F tokens.
Opera Android 未対応 なしSafari iOS 完全対応 13.3Samsung Internet Android 完全対応 10.0
attestationObjectChrome 完全対応 67
完全対応 67
完全対応 65
補足 無効
補足 Only supports USB U2F tokens.
無効 From version 65: this feature is behind the Web Authentication API preference (needs to be set to Enabled). To change preferences in Chrome, visit chrome://flags.
Edge 完全対応 18Firefox 完全対応 60
補足
完全対応 60
補足
補足 Only supports USB U2F tokens.
IE 未対応 なしOpera 未対応 なしSafari 完全対応 13WebView Android 完全対応 70Chrome Android 完全対応 70Firefox Android 完全対応 60
補足
完全対応 60
補足
補足 Only supports USB U2F tokens.
Opera Android 未対応 なしSafari iOS 完全対応 13.3Samsung Internet Android 完全対応 10.0
getTransports
実験的
Chrome 未対応 なしEdge 未対応 なしFirefox 未対応 なしIE 未対応 なしOpera 未対応 なしSafari 未対応 なしWebView Android 未対応 なしChrome Android 未対応 なしFirefox Android 未対応 なしOpera Android 未対応 なしSafari iOS 未対応 なしSamsung Internet Android 未対応 なし

凡例

完全対応  
完全対応
未対応  
未対応
実験的。動作が変更される可能性があります。
実験的。動作が変更される可能性があります。
実装ノートを参照してください。
実装ノートを参照してください。
ユーザーが明示的にこの機能を有効にしなければなりません。
ユーザーが明示的にこの機能を有効にしなければなりません。

AuthenticatorAssertionResponse

Update compatibility data on GitHub
デスクトップモバイル
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeAndroid 版 FirefoxAndroid 版 OperaiOSのSafariSamsung Internet
AuthenticatorAssertionResponseChrome 完全対応 67
完全対応 67
完全対応 65
補足 無効
補足 Only supports USB U2F tokens.
無効 From version 65: this feature is behind the Web Authentication API preference (needs to be set to Enabled). To change preferences in Chrome, visit chrome://flags.
Edge 完全対応 18Firefox 完全対応 60
補足
完全対応 60
補足
補足 Only supports USB U2F tokens.
IE 未対応 なしOpera 未対応 なしSafari 完全対応 13WebView Android 完全対応 70Chrome Android 完全対応 70Firefox Android 完全対応 60
補足
完全対応 60
補足
補足 Only supports USB U2F tokens.
Opera Android 未対応 なしSafari iOS 完全対応 13.3Samsung Internet Android 未対応 なし
authenticatorDataChrome 完全対応 67
完全対応 67
完全対応 65
補足 無効
補足 Only supports USB U2F tokens.
無効 From version 65: this feature is behind the Web Authentication API preference (needs to be set to Enabled). To change preferences in Chrome, visit chrome://flags.
Edge 完全対応 18Firefox 完全対応 60
補足
完全対応 60
補足
補足 Only supports USB U2F tokens.
IE 未対応 なしOpera 未対応 なしSafari 完全対応 13WebView Android 完全対応 70Chrome Android 完全対応 70Firefox Android 完全対応 60
補足
完全対応 60
補足
補足 Only supports USB U2F tokens.
Opera Android 未対応 なしSafari iOS 完全対応 13.3Samsung Internet Android 未対応 なし
signatureChrome 完全対応 67
完全対応 67
完全対応 65
補足 無効
補足 Only supports USB U2F tokens.
無効 From version 65: this feature is behind the Web Authentication API preference (needs to be set to Enabled). To change preferences in Chrome, visit chrome://flags.
Edge 完全対応 18Firefox 完全対応 60
補足
完全対応 60
補足
補足 Only supports USB U2F tokens.
IE 未対応 なしOpera 未対応 なしSafari 完全対応 13WebView Android 完全対応 70Chrome Android 完全対応 70Firefox Android 完全対応 60
補足
完全対応 60
補足
補足 Only supports USB U2F tokens.
Opera Android 未対応 なしSafari iOS 完全対応 13.3Samsung Internet Android 未対応 なし
userHandleChrome 完全対応 67
完全対応 67
完全対応 65
補足 無効
補足 Only supports USB U2F tokens.
無効 From version 65: this feature is behind the Web Authentication API preference (needs to be set to Enabled). To change preferences in Chrome, visit chrome://flags.
Edge 完全対応 18Firefox 完全対応 60
補足
完全対応 60
補足
補足 Only supports USB U2F tokens.
IE 未対応 なしOpera 未対応 なしSafari 完全対応 13WebView Android 完全対応 70Chrome Android 完全対応 70Firefox Android 完全対応 60
補足
完全対応 60
補足
補足 Only supports USB U2F tokens.
Opera Android 未対応 なしSafari iOS 完全対応 13.3Samsung Internet Android 未対応 なし

凡例

完全対応  
完全対応
未対応  
未対応
実装ノートを参照してください。
実装ノートを参照してください。
ユーザーが明示的にこの機能を有効にしなければなりません。
ユーザーが明示的にこの機能を有効にしなければなりません。

PublicKeyCredentialCreationOptions

Update compatibility data on GitHub
デスクトップモバイル
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeAndroid 版 FirefoxAndroid 版 OperaiOSのSafariSamsung Internet
PublicKeyCredentialCreationOptions
実験的
Chrome 完全対応 67Edge 完全対応 ≤79Firefox 完全対応 60IE 未対応 なしOpera 完全対応 54Safari 完全対応 13WebView Android 未対応 なしChrome Android 完全対応 67Firefox Android ? Opera Android 完全対応 48Safari iOS 完全対応 13.3Samsung Internet Android 未対応 なし
attestation
実験的
Chrome 完全対応 67Edge 完全対応 ≤79Firefox 完全対応 60IE 未対応 なしOpera 完全対応 54Safari 完全対応 13WebView Android 未対応 なしChrome Android 完全対応 67Firefox Android ? Opera Android 完全対応 48Safari iOS 完全対応 13.3Samsung Internet Android 未対応 なし
authenticatorSelection
実験的
Chrome 完全対応 67Edge 完全対応 ≤79Firefox 完全対応 60IE 未対応 なしOpera 完全対応 54Safari 完全対応 13WebView Android 未対応 なしChrome Android 完全対応 67Firefox Android ? Opera Android 完全対応 48Safari iOS 完全対応 13.3Samsung Internet Android 未対応 なし
challenge
実験的
Chrome 完全対応 67Edge 完全対応 ≤79Firefox 完全対応 60IE 未対応 なしOpera 完全対応 54Safari 完全対応 13WebView Android 未対応 なしChrome Android 完全対応 67Firefox Android ? Opera Android 完全対応 48Safari iOS 完全対応 13.3Samsung Internet Android 未対応 なし
excludeCredentials
実験的
Chrome 完全対応 67Edge 完全対応 ≤79Firefox 完全対応 60IE 未対応 なしOpera 完全対応 54Safari 完全対応 13WebView Android 未対応 なしChrome Android 完全対応 67Firefox Android ? Opera Android 完全対応 48Safari iOS 完全対応 13.3Samsung Internet Android 未対応 なし
extensions
実験的
Chrome 完全対応 67Edge 完全対応 ≤79Firefox 完全対応 60IE 未対応 なしOpera 完全対応 54Safari 完全対応 13WebView Android 未対応 なしChrome Android 完全対応 67Firefox Android ? Opera Android 完全対応 48Safari iOS 完全対応 13.3Samsung Internet Android 未対応 なし
pubKeyCredParams
実験的
Chrome 完全対応 67Edge 完全対応 ≤79Firefox 完全対応 60IE 未対応 なしOpera 完全対応 54Safari 完全対応 13WebView Android 未対応 なしChrome Android 完全対応 67Firefox Android ? Opera Android 完全対応 48Safari iOS 完全対応 13.3Samsung Internet Android 未対応 なし
rp
実験的
Chrome 完全対応 67Edge 完全対応 ≤79Firefox 完全対応 60IE 未対応 なしOpera 完全対応 54Safari 完全対応 13WebView Android 未対応 なしChrome Android 完全対応 67Firefox Android ? Opera Android 完全対応 48Safari iOS 完全対応 13.3Samsung Internet Android 未対応 なし
timeout
実験的
Chrome 完全対応 67Edge 完全対応 ≤79Firefox 完全対応 60IE 未対応 なしOpera 完全対応 54Safari 完全対応 13WebView Android 未対応 なしChrome Android 完全対応 67Firefox Android ? Opera Android 完全対応 48Safari iOS 完全対応 13.3Samsung Internet Android 未対応 なし
user
実験的
Chrome 完全対応 67Edge 完全対応 ≤79Firefox 完全対応 60IE 未対応 なしOpera 完全対応 54Safari 完全対応 13WebView Android 未対応 なしChrome Android 完全対応 67Firefox Android ? Opera Android 完全対応 48Safari iOS 完全対応 13.3Samsung Internet Android 未対応 なし

凡例

完全対応  
完全対応
未対応  
未対応
実装状況不明  
実装状況不明
実験的。動作が変更される可能性があります。
実験的。動作が変更される可能性があります。

PublicKeyCredentialRequestOptions

Update compatibility data on GitHub
デスクトップモバイル
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeAndroid 版 FirefoxAndroid 版 OperaiOSのSafariSamsung Internet
PublicKeyCredentialRequestOptions
実験的
Chrome 完全対応 67Edge 完全対応 ≤79Firefox 完全対応 60IE 未対応 なしOpera 完全対応 54Safari 完全対応 13WebView Android 完全対応 67Chrome Android 完全対応 67Firefox Android ? Opera Android 完全対応 48Safari iOS 完全対応 13.3Samsung Internet Android 未対応 なし
allowCredentials
実験的
Chrome 完全対応 67Edge 完全対応 ≤79Firefox 完全対応 60IE 未対応 なしOpera 完全対応 54Safari 完全対応 13WebView Android 完全対応 67Chrome Android 完全対応 67Firefox Android ? Opera Android 完全対応 48Safari iOS 完全対応 13.3Samsung Internet Android 未対応 なし
challenge
実験的
Chrome 完全対応 67Edge 完全対応 ≤79Firefox 完全対応 60IE 未対応 なしOpera 完全対応 54Safari 完全対応 13WebView Android 完全対応 67Chrome Android 完全対応 67Firefox Android ? Opera Android 完全対応 48Safari iOS 完全対応 13.3Samsung Internet Android 未対応 なし
extensions
実験的
Chrome 完全対応 67Edge 完全対応 ≤79Firefox 完全対応 60IE 未対応 なしOpera 完全対応 54Safari 完全対応 13WebView Android 完全対応 67Chrome Android 完全対応 67Firefox Android ? Opera Android 完全対応 48Safari iOS 完全対応 13.3Samsung Internet Android 未対応 なし
rpId
実験的
Chrome 完全対応 67Edge 完全対応 ≤79Firefox 完全対応 60IE 未対応 なしOpera 完全対応 54Safari 完全対応 13WebView Android 完全対応 67Chrome Android 完全対応 67Firefox Android ? Opera Android 完全対応 48Safari iOS 完全対応 13.3Samsung Internet Android 未対応 なし
timeout
実験的
Chrome 完全対応 67Edge 完全対応 ≤79Firefox 完全対応 60IE 未対応 なしOpera 完全対応 54Safari 完全対応 13WebView Android 完全対応 67Chrome Android 完全対応 67Firefox Android ? Opera Android 完全対応 48Safari iOS 完全対応 13.3Samsung Internet Android 未対応 なし
userVerification
実験的
Chrome 完全対応 67Edge 完全対応 ≤79Firefox 完全対応 60IE 未対応 なしOpera 完全対応 54Safari 完全対応 13WebView Android 完全対応 67Chrome Android 完全対応 67Firefox Android ? Opera Android 完全対応 48Safari iOS 完全対応 13.3Samsung Internet Android 未対応 なし

凡例

完全対応  
完全対応
未対応  
未対応
実装状況不明  
実装状況不明
実験的。動作が変更される可能性があります。
実験的。動作が変更される可能性があります。

関連情報