zakino123 / AuthenticationApp

MIT License
0 stars 0 forks source link

二要素認証を作成したい #1

Open zakino123 opened 4 months ago

zakino123 commented 4 months ago

以下のようなメールアドレスを使ったワンタイムパスワードを実装したい ・ログインしたい時などにユーザ作成したメールアドレスにトークンを送る ・ユーザがメールで受け取ったトークンをUKABUの画面に入力して、認証完了

zakino123 commented 4 months ago

どのような方法で実装できそうか

結論

gem devise-two-factorはTOTP認証用のgemであり、今回の実装には適していない。(gem rotpも同じ) 再度メールアドレスとパスワードを使ってログイン時に以下の処理を助けてくれるgemなどを探す

・ワンタイムパスワードを作成
・ログイン時のメールアドレスにワンタイムパスワードをメールで送信
・ワンタイムパスワードを入力できる画面に遷移
・ワンタイムパスワードを入力できる画面でメールで受け取ったワンタイムパスワードを入力すると、認可する

実装方法案

zakino123 commented 4 months ago

どのような方法で実装できそうか②

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

以下は使えなさそう

zakino123 commented 4 months ago

結論どのgemが良さそうか

結論

今回試したgemの中では、gem otp-jwtが最も良いと考える。 理由としては、今回実装する二要素認証処理のカバーできる範囲が今回試したgemの中で最も広く、認証の際にOTPを1回でも誤入力すると、発行したOTPは利用できなくなり、セキュリティの安全性が高いため。

各gemのメリット・デメリット

gem devise-two-factor

gem otp-jwt

gem active_model_otp

gem two_factor_authentication

このgemを導入後に、ログインしようとすると、update_attributesメソッドが見つからないというエラーになる。 Rails6.1から削除されたupdate_attributesメソッドが使われており、このgemでの実装は困難だと考えるため、 このgemは比較検討の対象外とする。