WebAuthn Level3 での修正点簡単なまとめ（と書籍の該当箇所の紹介）

1月28日に、「パスキーのすべて」という本を共著で出版させてもらうことになりました。

出版社の技術評論社のページに、本書の「はじめに」を掲載頂いています。1分で読み終わるので是非ご覧ください。
また、数ページほど、本文からの抜粋もご覧頂けます。どういった内容が書いてあるのか、イメージをつかんで頂いて、購入をご検討ください。

https://gihyo.jp/book/2025/978-4-297-14653-5/content/message

また、共著者のえーじさんが、本を紹介するブログを書いてくださっています。

https://blog.agektmr.com/2025/01/everything-about-passkeys.html

さらには、一瞬のタイミングでしたが、Amazonのランキングで1位を取ることもできました。予約してくださった皆さま、ありがとうございます。

![IMG_2585.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135431/a83139b1-e6fa-6505-4d85-d27242c7b58b.jpeg)
![IMG_2586.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135431/b7f2311c-54b4-83af-889a-1230b085f15d.jpeg)


諸先輩方のように、毎日ブログを書くことは私にはとても難しいので、3人で共著なのを理由にして、1月28日の発売まで、3日に1本ぐらいの感覚で、どこかのブログで記事を書き続けるチャレンジをしてみたいと思います。1ヶ月ぐらいならきっと続くことを祈ります。これは9本目。

---

# 本題

長々と失礼しました。

パスキーの実装に必要な仕様である WebAuthn は、2021年に Level 2仕様が標準となっていますが、現在、Level 3への更改作業が終盤を迎えています。
Level 3で、いわゆるパスキーを本格的に活用するための準備が整ったとも言えます。

Level3 Working Draft の 18.1節 「Changes since Web Authentication Level 2」で、Level 2とLevel 3の差分をまとめていましたので、その概要と、「パスキーのすべて」本文で取り扱っているページをご紹介します。

https://www.w3.org/TR/webauthn-3/#changes-l3-substantive

## Timeout 時間の変更

Level2では、パスキー作成、パスキーによる認証時のタイムアウト推奨時間が、ローカルユーザー検証の有無で2分もしくは5分とされていました。（Level 1ではコード例で60秒が使われていました。）
Level3では、デフォルト5分を推奨とし、さらに、Client(ブラウザ）は必要に応じてTimeout時間を延長してもよいとされています。
本書では、128ページ付近に記載をしています。また全体的にサンプルコードはtimeout 5分で統一しています。

## Attestationがnoneの場合もAAGUIDを付与できる

Level2までは `credentialCreationData.attestationConveyancePreferenceOption` が `none` だった場合にはAAGUIDをゼロ埋めすることとなっていましたが、それをしなくて良くなりました。パスキーの普及でUX改善のためにパスキープロバイダーの名称を表示する必要性が出てきたことからと思います。
AAGUIDの説明は本書内各所にありますが、一番詳しく説明しているのは166ページ付近です。

## rp.nameは必須だけどDEPRECATED

rp.nameが廃止予定となっています。多くのクライアントで利用されていないからとのこと。ただし、後方互換のためにパラメータは必須のままです。
rp.nameについては本書の125ページで必須パラメータとして紹介していますが、廃止予定という旨は記載ができていません。

## uvm extensionの廃止

## Android SafetyNet AttestationはDEPRECATED

こちらは廃止予定である事も含め、184ページに記載があります。

## JSON シリアライゼーション

WebAuthn APIを利用するためのリクエストオブジェクト、レスポンスオブジェクトは、いずれもArrayBufferを含むため、ネットワークでの送受信のためには独自にBase64url形式などへの変換が必要でした。それを不要にするためのメソッドが追加されました。
未対応のブラウザでも同様に使うためのPolyfillも含めて、89ページ付近で紹介しています。

## cross-origin iframe内でのパスキー作成

Level2でも、ドメインの異なるiframe内でのパスキーによる認証は iframeタグの `allow` パラメータに `publickey-credentials-get` を指定することで可能でしたが、Level3から、同様に　`publickey-credentials-create` を指定することで作成もできるようになりました。
同時に、clientDataJSON (CollectedClientData)オブジェクトに、 `topOrigin` も追加になっています。
本書内ではiframeについては扱っていません。

## Conditional Get, Creation

フォームオートフィルによる認証や、パスワードマネージャーによりパスワードを自動入力した際にパスキーを自動作成することができるようになりました。
フォームオートフィルによる認証は56ページや100ページ、パスキーの自動作成は94ページ付近で紹介しています。

## getClientCapabilities() メソッド

WebAuthnAPIの様々な機能の利用可否を1つのメソッドで判定できるようになりました。
本書の122ページなどで紹介しています。

## クロスデバイス認証　(hybrid)

PCでのログイン時に、QRコードを表示し、それをスマートフォンで読み込んで安全にログインできる仕組みです。
本書66ページ、「クロスデバイス認証のしくみ」というコラムで詳しく説明しています。

## Signal API

パスキーの状態の変更を、RPからパスキーマネージャに通知するための仕組みです。
174ページで使い方を含め詳しく説明しています。

## hints パラメータ

ブラウザに認証方法のヒントを与えるパラメータです。
本書128ページ等で説明しています。

## Related Origins (複数ドメインでのパスキーの共有）

通常パスキーは登録したドメインと同じドメインでしか利用できませんが、複数ドメインで利用する方法がRelated Originです。
本書170ページで詳しく説明しています。

## BE, BS フラグ

パスキーの肝である、クラウド同期・バックアップの状態を示すフラグが定義されています。
フラグについては182ページ付近などで説明しています。

## Compound Attestation

複数のAttestation Statementを同時に送信するための仕様です。
本書では取り扱っていません。

## Pseudo-random function (PRF) extension

End-to-End Encryption(E2EE) に利用できる暗号鍵を生成することができるextensionです。
212ページで使い方を詳しく説明しています。


# 以上です。

「パスキーのすべて」本では、Level3 仕様を幅広くカバーしています。是非書店で手に取ってご覧いただければと思います。