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
devise-two-factorを4.xから5.xに上げた話
Search
Kazuhiro NISHIYAMA
August 24, 2024
Technology
0
110
devise-two-factorを4.xから5.xに上げた話
[大阪Ruby会議04](
https://regional.rubykaigi.org/osaka04/)のスポンサーLTの発表資料です
。
Kazuhiro NISHIYAMA
August 24, 2024
Tweet
Share
More Decks by Kazuhiro NISHIYAMA
See All by Kazuhiro NISHIYAMA
Rubyの日本語リファレンスマニュアルの現在と未来
znz
0
28
docs.ruby-lang.org/ja/ の生成方法を変えた
znz
0
51
Ubuntuのriscv64版をqemuで動かした
znz
0
54
lilo.linux.or.jpをbusterからbullseyeに上げた
znz
0
64
小規模個人アプリをRails 7.xにバージョンアップした話
znz
0
49
Ruby リファレンスマニュアル改善計画 2022 進捗報告
znz
0
110
Rubyist Magazine Reboot
znz
0
150
History of Japanese Ruby reference manual, and future
znz
0
1.6k
qemuのriscv64にDebianを入れてみた
znz
0
110
Other Decks in Technology
See All in Technology
三菱電機で社内コミュニティを立ち上げた話
kurebayashi
1
320
あなたの人生も変わるかも?AWS認定2つで始まったウソみたいな話
iwamot
1
610
最近のSfM手法まとめ - COLMAP / GLOMAPを中心に -
kwchrk
8
1.8k
今年一年で頑張ること / What I will do my best this year
pauli
1
190
OCI技術資料 : ファイル・ストレージ 概要
ocise
3
12k
Bring Your Own Container: When Containers Turn the Key to EDR Bypass/byoc-avtokyo2024
tkmru
0
760
Alignment and Autonomy in Cybozu - 300人の開発組織でアラインメントと自律性を両立させるアジャイルな組織運営 / RSGT2025
ama_ch
1
2.1k
スケールし続ける事業とサービスを支える組織とアーキテクチャの生き残り戦略 / The survival strategy for Money Forward’s engineering.
moneyforward
0
250
Oracle Exadata Database Service(Dedicated Infrastructure):サービス概要のご紹介
oracle4engineer
PRO
0
12k
コロプラのオンボーディングを採用から語りたい
colopl
5
490
機械学習を「社会実装」するということ 2025年版 / Social Implementation of Machine Learning 2025 Version
moepy_stats
3
390
20240522 - 躍遷創作理念 @ PicCollage Workshop
dpys
0
310
Featured
See All Featured
Visualization
eitanlees
146
15k
Unsuck your backbone
ammeep
669
57k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
33
2.7k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
98
18k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
38
1.9k
Adopting Sorbet at Scale
ufuk
74
9.2k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
230
52k
Making the Leap to Tech Lead
cromwellryan
133
9k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
49k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
7k
A Tale of Four Properties
chriscoyier
157
23k
Side Projects
sachag
452
42k
Transcript
devise-two-factor を4.xから5.xに上 げた話 Kazuhiro NISHIYAMA 株式会社Ruby開発 大阪Ruby会議04 2024-08-24
self.introduction 西山 和広 Ruby のコミッター github など: @znz 株式会社Ruby開発 www.ruby-dev.jp
devise-two-factor とは? devise を TOTP の2要素認証に対 応するのに使う gem ユーザごとに以下のデータを保存 暗号化された
OTP シークレット (認証アプリに登録するもの) 使用済み OTP を区別できる情報 OTP が有効かどうか
4.x から 5.x への変更 下2個はそのままでいいが OTP シークレットの保存方法が変更 (再掲載) ユーザーごとに以下の データを保存
暗号化された OTP シークレット 使用済み OTP を区別できる情報 OTP が有効かどうか
4.x から 5.x への変更 4 は attr_encrypted gem encrypted_otp_secret, encrypted_otp_secret_iv,
encrypted_otp_secret_salt に Base64 でそれぞれ保存 5 は Rails 7+ 標準の encrypted attribute 暗号化したものを Base64 して JSON で otp_secret 1カラムに保存
更新手順 4 から 5 は Rails 6 から Rails 7
と同時に上げる必要あり https://github.com/devise-two-factor/ devise-two-factor/blob/main/ UPGRADING.md に手順あり ほとんど gem は複数の Rails に 対応していて独立して更新可能 今回はそうなっていない
なぜか? (推測) attr_encrypted gem と Rails 7 で #encrypted_attributes メ
ソッドが衝突する Rails 7 対応の attr_encrypted に 更新すると二度手間だから一気に 移行する手順になっている?
問題点 実運用環境なら Rails 7 に上げた 後に Rails 6 に戻す可能性もある のでは?
Rails 7 でユーザーの認証アプリと otp_secret だけが更新 → このまま Rails 6 に戻すと encrypted_* が古くて認証失敗 UPGRADING.md には戻す手順はない → 独自対応が必要
具体的には UPGRADING.md に legacy_otp_secret の実装例 公式の手順途中の動作 読み込み 新カラムが設定されていれば → otp_secret
なければ旧カラムを読む → legacy_otp_secret 書き込み は新しい otp_secret のみ
独自に書き込み対応 新しい otp_secret 書き込み時に legacy_otp_secret の逆手順で encrypted_* に同期 → legacy_otp_secret
でデコードした 結果が otp_secret と一致するのを確認 して自動テストも追加
手動ダウングレードテスト 実際に戻してみてテスト → うま く動かないので、さらに調査 → attr_encrypted が salt に
prefix と して _ をつける encode_salt オプショ ンがデフォルトで true Base64.decode64 は _ を無視する ので legacy_otp_secret は動く → 同期時に _ を prepend して解決
まとめ 非互換のダウングレード対応は新 バージョンでの互換メソッドの自 動テストだけでは不十分 手動でダウングレード確認も必須 その他の対応も場合分けして用意 例: ダウングレード中に encrypted_* だ
けが更新されて otp_secret が古くなる → otp_secret を nil に戻すタスク
宣伝 福岡Rubyist会議04 https:// regional.rubykaigi.org/fukuoka04/ 2024.09.07 Sat. 9:30–18:00 主催: Fukuoka.rb /
株式会社Ruby開発