-
Notifications
You must be signed in to change notification settings - Fork 13
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: 2FAのバックアップコードの実装 #121
Conversation
1811c45
to
e8f527a
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- 念の為、各翻訳にバックアップコード前の文章を含めたほうがいいかも (英語ならまあ無いよりマシだと思うので)
- 2FA が有効かつバックアップコードがない場合、設定画面かどこかに警告的なものを出せると良いかもしれない?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
(レビューになってなかったので再投稿)
↓みたいな雰囲気でレースコンディションが発生して、バックアップコードが一度のみ使えるという制約が死にそう
- 異なるバックアップコードを指定したリクエストAとリクエストBを同時に送信
- それぞれのリクエストが↓に到達してプロフィールデータを取得
https://github.com/MisskeyIO/misskey/blob/e8f527a6d01677d992a7039e6ce1aabb3a1ac85e/packages/backend/src/server/api/SigninApiService.ts#L122 - リクエストAが↓に到達、チェックを通過して使用されたバックアップコードを削除
https://github.com/MisskeyIO/misskey/blob/e8f527a6d01677d992a7039e6ce1aabb3a1ac85e/packages/backend/src/server/api/SigninApiService.ts#L158-L161 - リクエストBが↑に到達、チェックを通過して使用されたバックアップコードを削除
- この時、4で参照されるバックアップコード一覧は2で取得したプロフィールデータの情報に基づくため、3で削除されたはずのバックアップコードが含まれており、再度使用可能になる
とはいえこの問題が発生するのはリクエストAとリクエストBにそれぞれ正しいコードが含まれていた場合のみなので、この問題を許容するかどうかはおまかせします
OTPAuth.Secret()
は内部的にNode.jsのcryptoパッケージを使っているっぽいので生成方法としては問題なさそう
e8f527a
to
960a063
Compare
960a063
to
5141a44
Compare
Ry0taKさんに指摘いただいたissueについてはいい感じのsqlが思いつかず・・・ |
5141a44
to
179572c
Compare
What
ioモデレーターチームの要請
2faのセットアップ時にバックアップコードを提供
重要なコードなので言語設定で受け取れないと悲しいのでいったん翻訳にも入れてる
Why
Additional info (optional)
Checklist