Kōhei Yamamoto

WebAuthnによる認証機能を作りながら理解を深める

何をやったか

最近の仕事柄興味があったのと、WEB+DB PRESS Vol.114の特集2を読んだこともあって、理解を深めるためにWebAuthnでの公開鍵登録(今回はサインアップを兼ねる)、認証だけできる簡単なWebアプリを作りました。リポジトリのREADMEに様子のGIFアニメを貼っています。今回はChrome 80とTouch IDで試しています:

このボタンをクリックするとHerokuにデプロイできます。リポジトリのREADMEにも同じボタンを置いています:

Deploy

デプロイ後に環境変数 WEBAUTHN_ORIGINhttps://<Herokuアプリ名>.herokuapp.com を追加してください。

理解できた点

WebAuthn自体の詳しい説明は、Web上のリソースを参照したほうがよいので、今回はとくに書いていません。

登場する各ロールの役割

WebAuthの認証フローを見ると用語が多いですが、概ね次のように理解しました。

実装の感触

個人的にRailsだとさっと実装できるので、今回はRailsでやりました。webauthn-rubywebauthn-jsonの組み合わせで問題なく実装できます1。実装項目は次のような感じです。

サーバ

クライアント

RPサーバは署名、オリジン、チャレンジ値、認証回数の検証などプロトコルに規定されている検証を実行する必要がありますが、ライブラリである程度カバーできると思います。

認証体験

ふだんパスワードマネージャを使ってはいますが、やはりパスワードレスだと認証の体験がかなり簡単に感じました。これで多要素も満たせる(所持、生体)のも便利ですね。

脚注

  1. webauthn-rubyはデモアプリも公開していて、今回はそれを模倣している