After Kaigi on Rails Night LT登壇資料 メドピア株式会社 伊藤悠真 https://smartbank.connpass.com/event/299631/
WebAuthnを使ったパスワードレス認証をRailsアプリケーションで実装する2023/11/09 @After Kaigi on Rails Nightメドピア株式会社 伊藤悠真
View Slide
Kaigi on Rails お疲れ様でした!
気になったセッション
自己紹介● 伊藤悠真 (@yuma_ito_bd)● フィッツプラス(メドピアの子会社)のサーバーサイドエンジニア○ 特定保健指導の効率化支援ツールTonoelの開発● Ruby/Rails歴2年弱● 趣味:バスケ、コーヒー
パスワードを忘れたことがある人✋
パスワードが不要な認証方式があります!
体験してみよう!https://webauthn.io
3つのキーワード● FIDO● WebAuthn● パスキー
FIDO(Fast Identity Online)とは?● パスワードレスで認証するための技術● 指紋や虹彩などの生体情報やPIN、専用のセキュリティーキーを用いる● 公開鍵暗号方式を利用し、サーバーにはパスワードではなく公開鍵を保存する
FIDO認証のメリット● UXの向上○ パスワードを覚える必要がない● セキュリティーの向上○ 秘匿情報を通信しない(秘密鍵は認証器に安全に保存)○ Webサービスごとに異なる公開鍵を登録できる
WebAuthn=WebブラウザでFIDO認証を実現する仕様(API)
認証器 ブラウザWebAuthnの仕組み(登録)サーバ①チャレンジ要求②チャレンジ生成③本人認証を要求④本人認証⑤公開鍵/秘密鍵を生成、端末に秘密鍵を保存⑥公開鍵など署名情報を送信 ⑦署名情報を検証⑧公開鍵を保存
認証器 ブラウザWebAuthnの仕組み(認証)サーバ①チャレンジ要求②チャレンジ生成③本人認証を要求④本人認証⑤端末に保存された秘密鍵で署名⑥署名情報を送信 ⑦DBに保存された公開鍵で署名情報を検証
秘密鍵をクラウドで同期する仕組み例:認証器(iPhone)が変わっても同じAppleアカウントにログインしていればWebサービスにログインできる(狭義の)パスキー
(広義の)パスキーWebAuthnによるパスワードを使わない認証パスキー対応サービス:Google, Apple, Microsoft, Amazon, GitHub, 1Password,Yahoo! JAPAN, ドコモ, メルカリなど続々対応!
RailsでWebAuthnの認証機能を実装してみたい!
けど署名の検証とか仕様が難しそう・・・(実際、難しかったです)
アプリの公開が間に合いませんでした
WebAuthn用のGem● webauthn-ruby○ WebAuthnの認証サーバで必要な処理を担ってくれるGem● warden-webauthn○ RackベースのミドルウェアWardenでWebAuthn認証を行うGem● devise-passkeys○ devise(有名な認証用Gem)でWebAuthn認証を行うGem
WebAuthn用のnpmパッケージ● フロントエンドで必要な処理(認証器へのリクエスト、パラメータのbase64変換)を担う● @github/webauthn-json (star: 680)● @simplewebauthn (star: 981)○ サーバサイド(Node.js)の処理やTypeScriptの型情報が用意されている● @passwordless-id/webauthn (star: 213)
Model● User○ deviseの認証で使うモデル○ webauthn_id (ユーザID)● Passkey○ 公開鍵を管理するモデル○ label○ public_key○ external_id○ sign_count
Model
routesチャレンジ要求用エンドポイント
Controller (登録)認証サーバー情報チャレンジの生成署名の検証、公開鍵の保存
JavaScriptチャレンジ生成用URLブラウザがサポートしているか確認navigator.credentials.create()を内部で実行
まとめ● FIDO認証、WebAuthenの仕組み、パスキーについて● FIDO認証できる簡単なRailsアプリケーションのを実装方法について● FIDO認証の実装をぜひ検討してみてください!