SPIRAL ver.1で開発したWebサイトにアクセスする際に、使用するユーザには二段階認証を必ず設定してもらうようにしたいです。 ※当該サイトは二段階認証が必須という状況にしたい その場合は、以下のように実装するイメージでしょうか。 それとも、もっと違うやり方などありますでしょうか。 ====================================================== 【二段階認証を必須にする実装イメージ】 ①ログイン後、次の画面(以降、画面Aと記載)に設定した画面に遷移する ②画面Aの表示で、onloadイベントなどを拾い、そのタイミングでPHPで二段階認証設定されているかを確認 ・二段階認証がされていれば、そのまま画面Aを表示 ・二段階認証が設定されていなければ、二段階認証画面を表示する⇒③へ ③二段階認証画面で二段階認証の設定を行う ④設定後、二段階認証画面の「戻る」リンクにて、画面Aに遷移 ⑤画面Aのonloadイベントでは、二段階認証設定済みの為、そのまま画面Aを表示 ※私自身、PHPの開発経験がない為、何か根本的におかしなことを記載していたら申し訳ありません。 ====================================================== 宜しくお願い致します。
コメント
マイエリアへのログインで二段階認証を必須とすることはできないため、 暫定的にリファラを使用する旨の回答しておりました。 記載いただいております通り、リファラの場合は改ざんリスクがあるため、 セキュリティが厳しい案件での実装には、推奨できません。 不正防止処理を入れる場合は、PHPを利用して、独自で実装いただく必要がございます。 簡単ではございますが、下記などの実装が必要となります。 1. ログイン/ログアウト先 画面で、PHPで2段階認証用のSESSIONを破棄 2. ログイン後の全てのページでPHPで2段階認証用のSESSIONを確認 →(SESSIONあり)通常画面表示 →(SESSIONなし)3に進む 3. 2段階認証用のTRDBの登録フォームを設置し、ログイン時のメールアドレス宛にTRDBで発番したランダムキーを送信 4. TRDBで発番したランダムキーを一次保存用キーとしてSESSIONに保存し、2段階認証確認の画面作成・表示 5. 2段階認証の画面で配信されたキーと一次保存用キーとしてSESSIONに保存されたキーが一致しているチェック →(一致)2段階認証用のSESSIONを保存、一次保存用キーとしてSESSIONを削除し、通常画面表示 →(不一致)エラーを表示させ、2段階認証確認の画面表示 ※ マイエリアへのログイン自体は成功している状態ですが、PHPの処理として画面を出し分ける形となる形となっています。 ※ TRDBの登録フォームに関しては、APIでキー更新及びサンクスメール配信をご利用いただくことで、送信用の登録フォームを不要にできます。
今回の手順としては、標準のID/PWでのログイン認証に加え、メール認証による二段階認証を独自で実装いただく手順をご案内しております。 >「2段階認証用のSESSION」とありますが、これはSPIRAL上で何か設定するものでしょうか。具体的な設定手順を教えていただきたいです。 SPIRALの設定画面より設定する内容ではなく、PHPの処理にて生成したSESSIONを指しております。 SESSIONを扱う上で扱いやすいようにSPIRALでは独自の関数を用意しております。 SESSIONの生成、取得、削除が簡単に行えますのでよろしければご利用ください。 https://www.pi-pe.co.jp/help/phpdoc/spiral/SpiralSession.html
PHPで実装すべき処理の具体的な手順を記載させていただきます。 >1. ログイン/ログアウト先 画面で、PHPで2段階認証用のSESSIONを破棄 ・設定箇所:標準機能のログインページ、ログアウト先のページ ・設定内容:PHPでSESSION情報を削除する処理を実装 >2. ログイン後の全てのページでPHPで2段階認証用のSESSIONを確認 > →(SESSIONあり)通常画面表示 > →(SESSIONなし)3に進む ・設定箇所:ログイン後の全ページ ・設定内容:PHPで工程5で作成した二段階認証が成功したことを示すSESSION情報が存在するかを確認 存在する場合は、PHPの分岐処理で通常画面を表示し、処理は終了 存在しない場合は、3の処理を実行 >3. 2段階認証用のTRDBの登録フォームを設置し、ログイン時のメールアドレス宛にTRDBで発番したランダムキーを送信 >4. TRDBで発番したランダムキーを一次保存用キーとしてSESSIONに保存し、2段階認証確認の画面作成・表示 ・設定箇所:ログイン後の全ページ(カスタムモジュール等に設置することで、ページごとに設定せず共通で利用可能です) ・設定内容:TRDBで作成した標準登録フォームを表示、 認証キー通知等のボタン等でTRDBへ登録し、サンクスメールでメールアドレス宛に発番したランダムキーを送信 発番されたランダムキーをSESSIONに保存 独自で作成した2段階認証用の画面を表示 >5. 2段階認証の画面で配信されたキーと一次保存用キーとしてSESSIONに保存されたキーが一致しているチェック ・設定箇所:ログイン後の全ページ(カスタムモジュール等に設置することで、ページごとに設定せず共通で利用可能です) ・設定内容:独自で作成した2段階認証用の画面の入力欄に通知したランダムキーを入力いただき、POSTさせることで、 PHPでSESSIONに保存したランダムキーと一致するか確認 一致した場合は、SESSIONに二段階認証が成功した情報を保存し、ログイン後トップ画面へ遷移 一致しない場合は、画面にエラーであることを表示する。 以上の手順でご設定ください。
ナレッジ
向上チーム
今回ご質問いただいた二段階認証はSPIRAL ver.1のマイエリア機能にあります、二段階認証を利用いただくという認識でよろしいでしょうか。 現在標準機能では二段階認証を必須とすることはできないため、イメージでいただいたように何らかの方法で二段階認証しているしていないを判断の上、 ご対応いただく必要がございます。 ただ、二段階認証をしているか否かはDBやマイエリアのAPIでも判断ができないため、例えばログイン後トップページでPHPでリファラのURLを取得いただき、 「area.twofactorauth.AreaTwoFactor?」を経由いただいている場合は二段階認証をしている、経由していない人は二段階認証をしていないとして、 実装イメージの②の部分の二段階認証の有無の判断にご利用ください。 上記の対応方法にて、ご検討のほどよろしくお願いします。