---
url: 'https://www.corbado.com/ja/blog/passkeys-cheat-sheet'
title: '開発者向けパスキーチートシート'
description: 'WebAuthnとパスキー実装に関する開発者向けガイド。チートシートをPDFでダウンロードするか、このウェブサイトで一箇所に必要なすべての情報を確認できます。'
lang: 'ja'
author: 'Lukas R.'
date: '2026-07-03T07:12:06.096Z'
lastModified: '2026-07-03T07:12:55.114Z'
keywords: 'チートシート, パスキー, WebAuthn, 開発者ガイド'
category: 'Passkeys Implementation'
---

# 開発者向けパスキーチートシート

## 無料でダウンロード

完全版の**パスキーチートシートを無料でダウンロード**して、すべてのインサイトを手に入れましょう。

- ✅ すでに4,000回以上のダウンロード
- ✅ Ally、Kmart、Octopus [Energy](https://www.corbado.com/passkeys-for-energy)、スタンフォード大学CS学部の開発チームからのリクエスト
- ✅ マーケティング要素なし - 技術的なインサイトのみ

## Key Facts

- パスキーによる認証では、登録（attestation）とログイン（assertion）の2つの**セレモニー（ceremonies）**が使用され、それぞれにサーバーで生成され、Authenticatorによって署名されたランダムなチャレンジが必要です。
- **PublicKeyCredentialCreationOptions**はパスキーの登録を管理し、**PublicKeyCredentialRequestOptions**はログインを管理します。両方のオブジェクトはサーバー側で生成され、Authenticatorが署名するためのチャレンジを含みます。
- **Conditional UI**は利用可能なパスキーを自動入力の候補として表示しますが、Discoverable Credential（Resident Key）が必要であり、すべてのOSとブラウザの組み合わせでサポートされているわけではありません。
- **Relying Party ID（rpID）**は、パスキーをドメインにバインドします。認証は、URLがrpIDに完全に一致するか、Public Suffixではないサブドメインである場合にのみ成功します。
- パスキーは鍵の生成に**COSEアルゴリズム**を使用し、特定のアルゴリズムはattestationオブジェクトのparsedCredentialPublicKey属性に記録されます。

## 1. WebAuthnセレモニー

パスキーによる認証は、**登録**（または**attestationフェーズ**）と**ログイン**（または**assertionフェーズ**）と呼ばれる2つのプロセス（セレモニーとも呼ばれます）に基づいています。
各フェーズには、サーバーによって生成されたランダムなチャレンジが必要であり、これはAuthenticatorによって署名され、ユーザーを検証するためにWebAuthnサーバーに送り返されます。

### 1.1 登録（Attestation）

![Process flow of the registration ceremony in WebAuthn](https://www.corbado.com/website-assets/65fad0076e7b4367976ee993_cs_1_1_registration_flow_min_26eb12d652.png)
*登録セレモニーでは、PublicKeyCredentialCreationOptionsとattestationという2つの中心的なオブジェクトを使用します。*

[Watch on YouTube](https://www.youtube.com/watch?v=0hRYXHESA24)

### 1.2 ログイン（Assertion）

![Process flow of the login ceremony in WebAuthn](https://www.corbado.com/website-assets/65fad0f2e412e9ad9d2a5bf1_cs_1_2_login_flow_min_2aaefc04dd.png)
*ログインセレモニーでは、PublicKeyCredentialRequestOptionsとassertionという2つの中心的なオブジェクトを使用します。*

## 2. 重要なオブジェクト

パスキーを使用した登録とログインには、主に4つのオブジェクトがあります。

- PublicKeyCredentialCreationOptions
- PublicKeyCredentialRequestOptions
- attestation
- assertion

このセクションでは、PublicKeyCredentialCreationOptionsで使用されるauthenticatorSelectionオブジェクトについても説明します。

### 2.1 Public Key Credential Creation Options

PublicKeyCredentialCreationOptionsは、attestationフェーズ（登録）の中心的なオブジェクトです。これは[WebAuthnサーバー](#webauthn-server)によって作成され、返されます。

```json
{
    "PublicKeyCredentialCreationOptions": {
        "rp": {
            "id": "passkeys.eu",
            "name": "Corbado Passkeys Demo"
        },
        "user": {
            "displayName": "john.doe",
            "id": "dXNyLZ….DU10Tc",
            "name": "john@doe.com"
        },
        "challenge": "888fix4Bus...pHHr3Y",
        "pubKeyCredParams": [
            {
                "alg": -7,
                "type": "public-key"
            },
            {
                "alg": -257,
                "type": "public-key"
            }
        ],
        "excludeCredentials": [],
        "authenticatorSelection": {
            "authenticatorAttachment": "platform",
            "residentKey": "required",
            "userVerification": "required"
        },
        "attestation": "none",
        "extensions": {}
    }
}
```

このオブジェクトには以下の属性が含まれます。

- **rp:** Relying Party（＝ユーザーを認証しようとしているサーバー）を識別します。セクション[4.2 Relying Party ID（rpID）](#relying-party-id)を参照してください。
- **user:** attestationを要求しているユーザーアカウントに関するデータを含みます。IDはRelying Partyによって選択されたバイトシーケンスであり、個人情報を含めてはなりません。代わりに、ユーザー名やメールアドレスはnameまたはdisplayName属性に保存されます。これについては、セクション[4.1 データベーススキーマ](#database-schema)で詳しく説明しています。
- **challenge:** Authenticatorによって署名される必要がある、ランダムに生成されたbase64URLエンコードのBufferSource。
- **pubKeyCredParams:** 作成されるCredentialの指定された属性、通常はサポートされているアルゴリズム。
- **timeout:** クライアントが呼び出しの完了を待機するオプションのミリ秒単位の時間。
- **excludeCredentials:** 1つのデバイスで複数のパスキーが作成されるのを制限するための、Credentialのオプションリスト。
- **authenticatorSelection:** residentKeyが必要かどうかなど、メソッドで使用されるAuthenticatorのオプションの選択。[2.5 authenticatorSelection](#authenticatorSelection)を参照してください。
- **attestation:** attestationオブジェクトが特定の形式でRelying Partyに渡されることを要求するために使用できます。可能な値は、none（デフォルト）、indirect、direct、およびenterpriseです。
- **extensions:** 特定の戻り値など、追加処理のオプションのリクエスト。例：
    - *credProbs*は、作成されたCredentialがDiscoverableであるかどうかに関する情報を要求します。
    - *prf*は、Relying PartyがCredentialに関連付けられた疑似乱数関数（PRF）からの出力を使用できるようにします。

### 2.2 Public Key Credential Request Options

PublicKeyCredentialRequestOptionsは、assertionフェーズ（ログイン）の中心的なオブジェクトです。これは[WebAuthnサーバー](#webauthn-server)によって作成され、返されます。

```json
{
    "publicKeyCredentialRequestOptions": {
        "challenge": "pT7HMA-…dFPHk",
        "timeout": 500,
        "rpId": "passkeys.eu",
        "userVerification": "preferred",
        "allowCredentials": [],
        "extensions": []
    }
}
```

このオブジェクトには以下の属性が含まれます。

- **challenge, timeout, extensions:** [上記](#creationoptions)を参照してください。
- **rpId:** assertionリクエストに対するRelying Partyの識別子。セクション[4.2 Relying Party ID（rpID）](#relying-party-id)を参照してください。
- **allowCredentials:** 認証に許可されているCredentialのオプションのリスト。呼び出し元の優先順位を降順で示します。このリストはPublicKeyCredentialDescriptorsで埋められます。
- **userVerification:** 操作中のユーザー検証の要件を指定するオプションの値。可能な値は、preferred（デフォルト）、required、またはdiscouragedです。

### 2.3 Attestation

**Attestation** / 登録セレモニー中、Authenticatorはこの**登録レスポンス**を返します。[Passkeys Debugger](https://www.passkeys-debugger.io/)でご自身でお試しいただけます。

```json
{
    "authenticatorAttachment": "platform",
    "id": "JKZbixUfKN_aZtimefYT-OjH5dw",
    "rawId": "JKZbixUfKN_aZtimefYT-OjH5dw",
    "response": {
        "attestationObject": {
            "fmt": "none",
            "attStmt": {},
            "authData": {
                "rpIdHash": "PpZrl-Wqt-OFfBpyy2SraN1m7LT0GZORwGA7-6ujYkM",
                "flags": {
                    "userPresent": true,
                    "userVerified": true,
                    "backupEligible": true,
                    "backupStatus": true,
                    "attestedData": true,
                    "extensionData": false
                },
                "counter": 0,
                "aaguid": {
                    "raw": "fbfc3007-154e-4ecc-8c0b-6e020557d7bd",
                    "name": "iCloud Keychain"
                },
                "credentialID": "JKZbixUfKN_aZtimefYT-OjH5dw",
                "credentialPublicKey": "pQECAyYgASFYIPWLalDzyxIDmAADvfK8iNM5To50kh7TyPH-teEz8RMdIlgg3D7bPIWQJ8z-WFn3zdYZzJw9c7mhPdmflQqD9vV7efA",
                "parsedCredentialPublicKey": {
                    "keyType": "EC2 (2)",
                    "algorithm": "ES256 (-7)",
                    "curve": 1,
                    "x": "9YtqUPPLEgOYAAO98ryI0zlOjnSSHtPI8f614TPxEx0",
                    "y": "3D7bPIWQJ8z-WFn3zdYZzJw9c7mhPdmflQqD9vV7efA"
                }
            }
        },
        "clientDataJSON": {
            "type": "webauthn.create",
            "challenge": "k2p6f-upzP_hc6NZvmMAxiI0VSTeQIeXXVRGW62LTj0",
            "origin": "https://www.passkeys-debugger.io",
            "crossOrigin": false
        },
        "transports": ["hybrid", "internal"],
        "authenticatorData": "PpZrl-Wqt-OFfBpyy2SraN1m7LT0GZORwGA7-6ujYkNdAAAAAPv8MAcVTk7MjAtuAgVX170AFCSmW4sVHyjf2mbYpnn2E_jox-XcpQECAyYgASFYIPWLalDzyxIDmAADvfK8iNM5To50kh7TyPH-teEz8RMdIlgg3D7bPIWQJ8z-WFn3zdYZzJw9c7mhPdmflQqD9vV7efA",
        "publicKey": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE9YtqUPPLEgOYAAO98ryI0zlOjnSSHtPI8f614TPxEx3cPts8hZAnzP5YWffN1hnMnD1zuaE92Z-VCoP29Xt58A",
        "publicKeyAlgorithm": -7
    },
    "type": "public-key",
    "clientExtensionResults": {}
}
```

**attestation**には、[attestationObject](#attestationObject)、[algorithm](#algorithm)、[transport](#transport)フラグなどの重要なコンポーネントが含まれています。

#### 2.3.1 attestationObject

![The attestationObject is part of the attestation in WebAuthn](https://www.corbado.com/website-assets/65fad76914987b84f3ecf4cd_cs_2_3_attestation_Object_min_12a3b9e5cc.png)

[W3CのWebAuthn仕様](https://www.w3.org/TR/webauthn-2/#attestation-object)から引用

**attestationObject**はCBORエンコードされたオブジェクトであり、新しく作成されたCredential、公開鍵、およびその他の関連データに関する情報を含みます。

- **fmt**はパスキーでは通常「none」と評価されます
- **attStmt**はパスキーでは空であり、ハードウェアセキュリティキーなどの他のAuthenticatorでは入力されます
- **authData**は以下のデータを含む値のバッファです。

![authData is a buffer of values, containing e.g. flags, counters and extensions](https://www.corbado.com/website-assets/65fc7c70babae11893e3e1e1_cs_2_3_auth_Data_min_7a7d39d083.png)

[extensions](https://developer.mozilla.org/en-US/docs/Web/API/Web_Authentication_API/WebAuthn_extensions)についてもっと読む。

#### algorithm

パスキーは**COSEアルゴリズム**で生成され、[attestationオブジェクト](#attestation)のparsedCredentialPublicKeyの**algorithm属性**に使用されたアルゴリズムが示されます。
以下は、最も関連性の高いCOSEアルゴリズムの概要です。

![Passkeys are generated with COSE algorithms](https://www.corbado.com/website-assets/65fade5ce80ed150f88b59fb_cs_2_3_COSE_algorithms_min_f0d1a5f931.png)

#### 2.3.2 transport

**transports**プロパティは、Authenticatorがクライアントと通信できるメカニズムを示します。一般的な値の組み合わせの例は以下の通りです。

- **"transports": \["internal","hybrid"]**: パスキーは、プラットフォームAuthenticator（Face ID、Touch ID、Windows Helloなど）から使用するか、クロスデバイス認証（QRコードとBluetoothを使用）を介して使用できます。
- **"transports": \["internal"]**: パスキーは、プラットフォームAuthenticator（Face ID、Touch ID、Windows Helloなど）からのみ使用できます。
- **"transports"プロパティが設定されていない場合:** デフォルトの動作で、指示はありません。

### 2.4 Assertion

**Assertion** / ログインセレモニー中、Authenticatorはこの**ログインレスポンス**を返します。[Passkeys Debugger](https://www.passkeys-debugger.io/)でご自身でお試しいただけます。

```json
{
    "id": "JKZbixUfKN_aZtimefYT-OjH5dw",
    "rawId": "JKZbixUfKN_aZtimefYT-OjH5dw",
    "type": "public-key",
    "authenticatorAttachment": "platform",
    "response": {
        "authenticatorData": {
            "rpIdHash": "PpZrl-Wqt-OFfBpyy2SraN1m7LT0GZORwGA7-6ujYkM",
            "flags": {
                "userPresent": true,
                "userVerified": true,
                "backupEligible": true,
                "backupStatus": true,
                "attestedData": false,
                "extensionData": false
            },
            "counter": 0
        },
        "clientDataJSON": {
            "type": "webauthn.get",
            "challenge": "GCVkITWbe2l2dttsn_DgJYvH9QPHPDo0ygWgcgI6B7U",
            "origin": "https://www.passkeys-debugger.io",
            "crossOrigin": false,
            "other_keys_can_be_added_here": "do not compare clientDataJSON against a template. See https://goo.gl/yabPex"
        },
        "signature": "MEQCIA-orC8N2KKWOxyY17BWP8lB-Be5to9btXRnJZf2SLhXAiBGxJe5Eu5LwOTbsyzAYmIXHOhlC3pN7s7Q1fRLvEW57g",
        "userHandle": "_FKz1uwqmR_3yGq6hJntzoIFwFC_d1u_53YRELh0KlE"
    }
}
```

**assertion**には、flags、signature、userHandleなどの重要なコンポーネントが含まれています。

#### 2.4.1 flags

以下は、最も関連性の高い**flags**とその組み合わせの概要です。

![The most important flags are userPresent, userVerified, backupEligible, backupStatus](https://www.corbado.com/website-assets/65fc7ca5a6a6fb1f3e66b514_cs_2_4_flags_min_19e5ddc4ce.png)

#### 2.4.2 signature

**signature**は、ログインしようとしているユーザーが実際に秘密鍵を持っていることを検証するために使用されます。署名は、authenticatorDataとclientDataHash（つまり、ClientDataJSONのSHA-256バージョン）を連結し、（Authenticator内の）秘密鍵で結果に署名することによって作成されます。公開鍵で検証するには、authenticatorDataとclientDataHashも連結します。検証結果がtrueを返した場合、認証は成功です。

![The signature is used to verify the private key](https://www.corbado.com/website-assets/65fae2ad96200e9576992209_cs_2_4_signature_min_36b9b8ccbe.png)

#### 2.4.3 userHandle

**userHandle**は実際のuser_idです。user_idの詳細については、セクション[**4.1 データベーススキーマ**](#database-schema)を参照してください。

### 2.5 authenticatorSelection

**authenticatorSelection**オブジェクトを使用すると、サーバーは以下の値を使用してAuthenticatorとCredential作成の設定を指示できます。

#### 2.5.1 authenticatorAttachment

- **Platform:** Authenticatorはクライアントのプラットフォームに接続されているため、取り外しできません。
- **Cross-platform:** Authenticatorはクライアントのプラットフォームにバインドされておらず、複数のデバイスで使用できます。

#### 2.5.2 residentKey

- **Required:** AuthenticatorはResident Keyを作成する必要があります（不可能な場合、操作は失敗するはずです）。
- **Preferred:** AuthenticatorはResident Keyの作成を試みる必要があります（不可能な場合、Non-Resident Keyを作成するはずです）。
- **Discouraged:** AuthenticatorはNon-Resident Keyを作成する必要があります（不可能な場合、操作は失敗するはずです）。

> **Resident Key（Discoverable Credentialとも呼ばれます）：** Resident KeyはAuthenticatorに保存され、認証時に取得されます。この方法により、クライアントは可能なキーのリストを発見できるため、Conditional UIにはResident Keyが必要です。
> **Non-Resident Key（Non-Discoverable Credentialとも呼ばれます）：** Non-Resident Keyの場合、Credential IDはサーバーに保存され、認証時に提供されます。Credential IDは[不透明な識別子（opaque identifier）](https://www.w3.org/TR/webauthn-3/#sctn-credential-id)であり、その内部構造は実装固有です。Authenticatorは秘密鍵を直接保存したり、暗号化されたキーラッピングを使用したり、内部シークレットから鍵を派生させたりすることがあります。正確なメカニズムはAuthenticatorの実装によって異なります。

#### 2.5.3 userVerification

- **Required:** 操作はユーザーを検証する必要があります。
- **Preferred:** 操作はユーザーを検証する必要がありますが、検証なしで続行できます（標準オプション）。
- **Discouraged:** 操作はユーザーを検証してはなりません。

> **警告:** "**Preferred**"に設定されている場合、ユーザーまたはそのデバイスは認証プロセスでのユーザー検証をスキップできます（詳細はこの[記事](https://web.dev/articles/passkey-form-autofill)でご覧ください）。

## 3. Conditional UI

**Conditional UI**（パスキーの自動入力）は、ユーザーがRelying PartyにResident Keyを登録している場合に、利用可能なパスキーをユーザー向けの選択ドロップダウンに表示します。パスキーのユーザビリティは向上しますが、追加の開発工数が必要であり、すべてのOSやブラウザの組み合わせで利用できるわけではありません。

### 3.1 Conditional UIによるログインフロー

![Process flow of a login with Conditional UI in WebAuthn](https://www.corbado.com/website-assets/65fae71a75d50f6ba14041d9_cs_3_1_conditional_ui_flow_min_394a12f521.png)
*通常のログインと同様に、Conditional UIもPublicKeyCredentialRequestOptionsとassertionのオブジェクトを使用します*

### 3.2 デバイスの互換性

Conditional UIは、（まだ）すべてのオペレーティングシステムとブラウザの組み合わせで利用できるわけではありません。以下は、現在のブラウザの対応状況の概要です（2024年3月時点）。

![Table that shows the availability of Conditional on OS/browser combinations](https://www.corbado.com/website-assets/65fae8d6321e72be11445913_cs_3_2_conditional_ui_compatibility_min_d5767f13b3.png)

最新の概要については、[このウェブサイト](https://caniuse.com/mdn-api_publickeycredential_isconditionalmediationavailable_static)を参照してください。

### 3.3 コード例

#### 3.3.1 Conditional UIメソッド

Conditional UIメソッドの完全な最小限のコードは次のようになります。

```html
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>Conditional UI</title>
    </head>
    <body>
        <input type="text" id="username" autocomplete="username webauthn" />

        <script>
            async function passkeyLogin() {
                try {
                    // retrieve the request options (incl. the challenge) from the WebAuthn server
                    let options = await WebAuthnClient.getPublicKeyRequestOptions();

                    const credential = await navigator.credentials.get({
                        publicKey: options.publicKeyCredentialRequestOptions,
                        mediation: "conditional",
                    });

                    const userData = await WebAuthnClient.sendSignedChallenge(credential);
                    window.location.href = "/logged-in";
                } catch (error) {
                    console.log(error);
                }
            }

            passkeyLogin();
        </script>
    </body>
</html>
```

#### 3.3.2 ブラウザの互換性チェック

Conditional UIは**Resident Key** / Discoverable Credentialでのみ機能します。
Conditional UIのログインを開始するには、**個別のサーバーエンドポイント**を提供することをお勧めします。
クライアントは複数の要件を満たす必要があります。

- ブラウザがConditional UIをサポートしている必要があります（[3.2 デバイスの互換性](#device-compatibility)を参照）。
- JavaScriptが有効になっており、WebページがHTML入力フィールドを提供している必要があります。
- タイムアウトパラメータは無視されるべきです。

エラーを回避するために、サーバーはまず次の機能を使用してクライアントの可用性をテストする必要があります。
実際のトラフィックでは、検出やライフサイクルの問題が`NotAllowedError`や`AbortError`として表面化することがよくあります。予期されるエラーと予期しないエラーの分類、およびネイティブCredential Managerのパスキーエラーについては、WebAuthnエラーガイドを使用してください。

```javascript
// source: https://developer.mozilla.org/en-US/docs/Web/API/PublicKeyCredential/isConditionalMediationAvailable#examples

// Availability of `window.PublicKeyCredential` means WebAuthn is usable.
if (window.PublicKeyCredential && PublicKeyCredential.isConditionalMediationAvailable) {
    // Check if conditional mediation is available.
    const isCMA = await PublicKeyCredential.isConditionalMediationAvailable();
    if (isCMA) {
        // Call WebAuthn authentication start endpoint

        let options = await WebAuthnClient.getPublicKeyRequestOptions();

        const credential = await navigator.credentials.get({
            publicKey: options.publicKeyCredentialRequestOptions,
            mediation: "conditional",
        });
        /*
    ...
    */
    }
}
```

#### 3.3.3 入力フィールドのAutocompleteトークン

入力フィールドは、進行中のリクエストにパスキーを入力するようにクライアントに合図するHTML自動入力トークンを受け取る必要があります。パスキー以外にも、自動入力トークンは既存のトークン（ユーザー名やパスワードなど）と組み合わせることができます。

- autocomplete="username webauthn": パスキーの表示に加えて、ユーザー名の自動入力も提案します。
- autocomplete="current-password webauthn": パスキーの表示に加えて、パスワードの自動入力も促します。

```html
<label for="name">Username:</label>
<input type="text" name="name" autocomplete="username webauthn" />
<label for="password">Password:</label>
<input type="password" name="password" autocomplete="current-password webauthn" />
```

## 4. WebAuthnサーバー

### 4.1 データベーススキーマ

WebAuthnサーバーに必須または標準化されたデータベーススキーマはありません。しかし、このデータベーススキーマの例を使用して、必要な情報を保存し、WebAuthnサーバーのすべての機能を提供することができます。

![Example database schema for a WebAuthn server, containing data for 'user' and 'credential](https://www.corbado.com/website-assets/65fc7cda64ff7798cdbb2dfc_cs_4_1_database_schema_min_8ac4536120.png)
*太字の属性は必要最小限の実装に必須ですが、その他の属性はオプションですが役立つ機能にのみ必要です。*

#### 4.1.1 認証関連データ

- **Credential ID:** これは、パスキーの登録中にAuthenticatorによって生成される一意のIDです。パスキーに関連付けられている実際のユーザーアカウントを検索するために使用する必要があります。さらに、認証に使用されたアカウントを検証するために、userHandle（user_idから取得）を比較する必要があります。user.name属性は時間の経過とともに変更される可能性があるため、比較には使用しないでください。
- **ユーザーID（user_id）:** システム内のユーザーアカウントを表すためにRelying Partyによって指定される一意のID。assertionオブジェクト内のuserHandleとして返されます。

#### 4.1.2 パスキーの表示と選択のためのメタデータ：

- **ユーザーDisplayName（user.displayName）:** ユーザーフレンドリーで読みやすい名前であり、通常はユーザーのフルネームです。ユーザーに表示されますが、認証中には使用されません。

- **ユーザー名（user.name）:** 一意で読みやすい名前であり、通常はメールアドレスまたはユーザー名です。ユーザーに表示できますが、認証中には使用されません。

### 4.2 Relying Party ID（rpId）

**Relying Party ID（rpID）**はパスキー内に保存されるドメインであり、パスキーが正しいドメインでのみ機能することを保証します（ブラウザのURL、ネイティブアプリについてはこちらの記事を参照してください）。
認証中、rpIDはブラウザのURLと照合され、以下の2つのケースでのみ許可されます。

1. URLがrpIdと完全に一致する場合。
2. URLがrpIdと一致するサブドメインであり、親ドメインがPublic Suffix Listに載っていない場合。

許可される（または許可されない）組み合わせの例を以下に示します。

![Examples for allowed and disallowed combinations of Relying Party IDs](https://www.corbado.com/website-assets/65fc7d099bf36909d7f40495_cs_4_2_rpid_examples_min_55f5750e90.png)

## 5. 役立つウェブサイトとツール

以下は、パスキーを実装するための便利なツールとウェブサイトのリストです。

- [**Passkeys Debugger:**](https://www.passkeys-debugger.io/) WebAuthnレスポンスをJSONとしてデバッグし、さまざまなオプションでWebAuthn操作をテストするためのツール。
- **パスキー用語集:** パスキー関連の用語と概念の説明
- [**WebAuthn仕様:**](https://www.w3.org/TR/webauthn-2/) これは公式のWebAuthn仕様です。
- [**Chromeデバイスログ:**](http://chrome://device-log) デバイスのWebAuthn操作のログを表示するためのツール（`chrome://device-log`経由でChromeでのみ利用可能）

技術的な実装を超えてパスキーUXを最適化する戦略については、パスキー作成のベストプラクティスとパスキーログインのベストプラクティスに関するガイドをご覧ください。

数行のコードであらゆるアプリケーションにパスキーを実装したい場合は、[Corbado Complete](https://docs.corbado.com/start)（新規アプリ向け）または[Corbado Connect](https://www.corbado.com/enterprise)（既存アプリ向け）を使用することもできます。

## よくある質問（FAQ）

### Webアプリのパスキー自動入力機能でConditional UIを実装するにはどうすればよいですか？

Conditional UIを実装するには、認証を開始する前に`PublicKeyCredential.isConditionalMediationAvailable()`を使用してブラウザのサポートを確認する必要があります。入力フィールドには`autocomplete="username webauthn"` HTMLトークンを含める必要があり、ユーザーはResident Key（Discoverable Credential）を登録している必要があります。Conditional UIのログインフローを処理するために、個別のサーバーエンドポイントを設けることを推奨します。

### WebAuthn認証をサポートするためにデータベースに保存すべき最小限のデータは何ですか？

最低限、登録時にAuthenticatorによって生成されるCredential IDと、assertionオブジェクトのuserHandleとして返されるユーザーID（user_id）を保存します。Credential IDを使用して関連付けられたユーザーアカウントを検索し、userHandleを比較して認証を検証します。user.nameは時間の経過とともに変更される可能性があるため、比較に使用しないでください。

### WebAuthnにおけるResident KeyとNon-Resident Keyの違いは何ですか？

Resident Key（Discoverable Credential）はAuthenticator自体に保存され、認証時に取得されます。これはConditional UIが機能するために必要です。Non-Resident KeyはCredential IDをサーバーに保存し、認証時にそれをAuthenticatorに送信します。authenticatorSelectionのresidentKeyフィールドは、"required"、"preferred"、または"discouraged"の値でこの動作を制御します。

### userVerificationはどのように機能し、それをpreferredに設定するリスクは何ですか？

userVerificationフィールドは、ログイン時にAuthenticatorがユーザーを検証する必要があるかどうかを制御し、"required"、"preferred"（デフォルト）、または"discouraged"の値を受け入れます。"preferred"に設定されている場合、ユーザーまたはそのデバイスは認証プロセス中に検証を完全にスキップできるため、セキュリティが弱まる可能性があります。"required"に設定すると、認証が完了する前に常に検証が行われます。
