FIDO学習の流れで、WebAuthについても概要(概念や大まかな処理の流れ)をまとめる。
WebAuthnとは
- WebAuthn(WebAuthenticationの略。「ウェブオースン」と読む。)はFIDO認証をベースとした、ブラウザ経由でパスワードレス認証を行うための仕組み。
- WebAuthnを実現するために用意されているJavaScript APIをWebAuthn APIと呼ぶ。
WebAuthnの概念
-
サーバ
- サービスやRelying Party(RP)とも呼ぶ。
- 認証情報の登録、認証結果の検証を行う。
-
認証器(Authenticator)
- 秘密鍵と公開鍵の作成を行い、秘密鍵をセキュア領域に保存しておく機能を持つ主体。
- 認証時に本人性の検証結果に対して秘密鍵を用いた署名を行う。
WebAuthnの仕組み
登録
※WebAuthn による登録手順と各アクションでのデータのフロー図(MDNより引用)
⓪ ユーザはWebAuthn登録情報をサーバに送信し、ユーザ登録を要求する。(ユーザ/認証器登録開始)
① サーバはフロントエンドアプリ(Javascript Application)に対して、レスポンスを返却する。
- チャレンジ生成→チャレンジ+ユーザ情報を保存。
- チャレンジ, RP情報などを含めてレスポンスを返却。
② フロントエンドアプリはWebAuthn APIを呼び出し、認証器に認証データを生成させる。
③ 認証器はユーザ確認を行い、公開鍵とAttestationを生成する。
- Attestation:認証器の正当性を証明する情報。
- ブラウザは、認証器を選択し、本人確認を行うことを促す。
④ 認証器は生成した公開鍵とAttestation等の認証情報をブラウザに返却する。
⑤ フロントエンドアプリは、受け取った認証情報をサーバに送信する。
⑥ サーバは認証情報を公開鍵を用いて検証し、正当性を確認できた場合に登録成功とする。
認証
※WebAuthn による認証手順と各アクションでのデータフロー図(MDNより引用)
⓪ ユーザはサーバへ認証を要求する。
① サーバはユーザの登録済みチェックを行い、フロントエンドアプリに対して、レスポンスを返却する。
② フロントエンドアプリはサーバから返却されたレスポンスからWebAuthn API を呼び出し、認証器に認証データを用意させる。
③ 認証器はユーザ確認を行い、Assertionを生成する。
- Assertion : 認証器が署名した、チャレンジやRPの情報を含んだ情報。
④ 認証器はAssertionに署名した認証情報をブラウザに返却する。
⑤ フロントエンドアプリは認証器から受信した認証情報などを含めたリクエストをサーバーに送信する。
⑥サーバは認証情報を公開鍵を使って検証し、正当性を確認できれば認証を成功とする。