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