Open zakino123 opened 4 months ago
gem devise-two-factorはTOTP認証用のgemであり、今回の実装には適していない。(gem rotpも同じ) 再度メールアドレスとパスワードを使ってログイン時に以下の処理を助けてくれるgemなどを探す
・ワンタイムパスワードを作成
・ログイン時のメールアドレスにワンタイムパスワードをメールで送信
・ワンタイムパスワードを入力できる画面に遷移
・ワンタイムパスワードを入力できる画面でメールで受け取ったワンタイムパスワードを入力すると、認可する
gem devise-two-factorでの実装 deviseに二要素認証を追加するための拡張機能であるgem OTPを簡単に作成することができる 4ヶ月前ぐらいにまでgemのアップデートがある Github:https://github.com/devise-two-factor/devise-two-factor
gem rotpでの実装 OTPを簡単に作成することができる 4ヶ月前ぐらいにまでgemのアップデートがある Github:https://github.com/mdp/rotp
gemを利用しないでdeviseの機能で実装できるかどうか
https://github.com/stas/otp-jwt
https://github.com/heapsource/active_model_otp
https://github.com/Houdini/two_factor_authentication
実装できるが、セキュリティを考えると自前で実装は怖い もし、自前で実装する場合は以下のサイトも参考にしても良さそう https://sandeshbodake.medium.com/otp-based-authentication-with-devise-4265ced1b4ef
今回試したgemの中では、gem otp-jwt
が最も良いと考える。
理由としては、今回実装する二要素認証処理のカバーできる範囲が今回試したgemの中で最も広く、認証の際にOTPを1回でも誤入力すると、発行したOTPは利用できなくなり、セキュリティの安全性が高いため。
メリット OTP生成、OTP認可をこのgemで対応できる
デメリット
このgemを導入することで、ログインできないバグが生じてしまう
devise-two-factor
は、TOTPでの認証を想定して作成されているgemであるため、その分gemのリソースを使いこなせていない
メリット OTP生成、メール送信、OTP認可をこのgemで対応できるため、他のgemと比較して最も幅広く対応 OTP入力認証画面で1回入力をミスすると、発行したOTPは利用できなくなるため、セキュリティの安全性が高い
デメリット JWTトークン認証の機能は活用しないため、その分gemのリソースを使いこなせていない 1回OTPの入力をミスすると、そのOTPは使えなくなってしまうため、ユーザにとっては使いづらいと思う人もいるかもしれない
メリット OTP生成、OTP認可をこのgemで対応できる 時間ベースのOTP生成の場合、Userモデルへのカラムの追加が最小限にできる 時間ベースのOTP生成の場合、生成したOTPは30秒で使えなくなるため、セキュリティの安全性が高い
デメリット 時間ベースでのOTPを生成した場合に、そのOTPは30秒までしか使えず、メールアドレスを使ったOTP認証では使いづらそう しかし、その時はOTPを作成した際のカウントを元にOTP生成できる機能があるため、問題はなさそう TOTPでの認証機能を想定されて作成されたgemであるため、その分gemのリソースを使いこなせていない
このgemを導入後に、ログインしようとすると、update_attributes
メソッドが見つからないというエラーになる。
Rails6.1から削除されたupdate_attributes
メソッドが使われており、このgemでの実装は困難だと考えるため、
このgemは比較検討の対象外とする。
以下のようなメールアドレスを使ったワンタイムパスワードを実装したい ・ログインしたい時などにユーザ作成したメールアドレスにトークンを送る ・ユーザがメールで受け取ったトークンをUKABUの画面に入力して、認証完了