Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
20231109_WebAuthnを使ったパスワードレス認証をRailsアプリケーションで実装する
Search
Yuma Ito
November 09, 2023
Technology
0
4.2k
20231109_WebAuthnを使ったパスワードレス認証をRailsアプリケーションで実装する
After Kaigi on Rails Night LT登壇資料
メドピア株式会社 伊藤悠真
https://smartbank.connpass.com/event/299631/
Yuma Ito
November 09, 2023
Tweet
Share
Other Decks in Technology
See All in Technology
【SORACOM UG 東海】あらゆるモノがつながる社会へ、IoT と SORACOM
soracom
PRO
1
140
Cypress or Playwright?
rainerhahnekamp
0
170
Google Cloud Next '24でブログを10本書いた方法と勉強会を沸かせた方法
yasumuusan
0
330
非同期推論システムによるコスト削減と信頼性向上
koki_nishihara
1
360
VSCodeの拡張機能を作っている話
ebarakazuhiro
1
810
2024春 注目のWeb系 OSS & SaaS 3選
makies
0
180
推しは推せるときに推せ! プロダクトにフィードバックしていこう
nakasho
0
460
Babylon.js JAPAN活動紹介 (2024/4)
limes2018
1
120
今さら聞けないDocker入門 〜 Dockerfileのベストプラクティス編
devops_vtj
4
560
AWS学習者向けにAzureの解説スライドを作成した話
handy
3
190
よく聞くけど使ったことないソフトウェアNo.1 KafkaとSnowflake
foursue
4
510
Tellus の衛星データを見てみよう #mf_fukuoka
kongmingstrap
0
270
Featured
See All Featured
Building Effective Engineering Teams - LeadDev
addyosmani
31
1.9k
BBQ
matthewcrist
80
8.8k
Optimizing for Happiness
mojombo
370
69k
Optimising Largest Contentful Paint
csswizardry
12
2.4k
Pencils Down: Stop Designing & Start Developing
hursman
117
11k
The MySQL Ecosystem @ GitHub 2015
samlambert
244
12k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
221
21k
Making Projects Easy
brettharned
109
5.5k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
41
4.4k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
20
1.6k
Fashionably flexible responsive web design (full day workshop)
malarkey
398
65k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
245
20k
Transcript
WebAuthnを使ったパスワードレス 認証をRailsアプリケーションで実装 する 2023/11/09 @After Kaigi on Rails Night メドピア株式会社
伊藤悠真
Kaigi on Rails お疲れ様でした!
気になったセッション
自己紹介 • 伊藤悠真 (@yuma_ito_bd) • フィッツプラス(メドピアの子会社)の サーバーサイドエンジニア ◦ 特定保健指導の効率化支援ツール Tonoelの開
発 • Ruby/Rails歴2年弱 • 趣味:バスケ、コーヒー
パスワードを忘れたことがある人 ✋
パスワードが不要な認証方式が あります!
体験してみよう! https://webauthn.io
3つのキーワード • FIDO • WebAuthn • パスキー
FIDO (Fast Identity Online) とは? • パスワードレスで認証するための技術 • 指紋や虹彩などの生体情報やPIN、専用の セキュリティーキーを用いる
• 公開鍵暗号方式を利用し、サーバーにはパ スワードではなく公開鍵を保存する
FIDO認証のメリット • UXの向上 ◦ パスワードを覚える必要がない • セキュリティーの向上 ◦ 秘匿情報を通信しない(秘密鍵は認証器に安全に保 存)
◦ Webサービスごとに異なる公開鍵を登録できる
3つのキーワード • FIDO • WebAuthn • パスキー
WebAuthn =WebブラウザでFIDO認証を 実現する仕様(API)
認証器 ブラウザ WebAuthnの仕組み(登録) サーバ ①チャレンジ要求 ②チャレンジ生成 ③本人認証を要求 ④本人認証 ⑤公開鍵/秘密鍵を 生成、端末に秘密鍵
を保存 ⑥公開鍵など署名情報を送信 ⑦署名情報を検証 ⑧公開鍵を保存
認証器 ブラウザ WebAuthnの仕組み(認証) サーバ ①チャレンジ要求 ②チャレンジ生成 ③本人認証を要求 ④本人認証 ⑤端末に保存された 秘密鍵で署名
⑥署名情報を送信 ⑦DBに保存された公開 鍵で署名情報を検証
3つのキーワード • FIDO • WebAuthn • パスキー
秘密鍵をクラウドで同期する仕組み 例:認証器(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認証の実装をぜひ検討してみてください!