前回前々回とGoogle Authenticator の使い方やQRコードの生成についての記事を書きました。
今回は、WordPressの管理画面ログイン時に二段階認証をプラグインで実装しました。
作ったプラグイン
まずはプラグインの紹介をします。
プラグインはGitHubに公開しました。
https://github.com/Zaty-Akiyama/zaty_wordpress_login_authenticator
このリポジトリをダウンロード後、WordPressの管理画面からプラグインをアップロードするだけで利用できます。
プラグインを有効化するとユーザーのプロフィールページの下部に二段階認証の項目が表示されます。
シークレットコードを生成すると画像が表示されるので下のボタンをクリックしてQRコードを表示してください。
このQRコードをスマホアプリのGoogle Authenticator で読み取ります。これで次回ログインから二段階認証を求められるようになります!
シークレットコードを紛失すると復旧作業をする必要があります。復旧作業は以下の手順で行えますが、WordPressを管理権限のないサーバーで運用している場合、復旧作業が困難になります。
シークレットコードを紛失した場合
QRコードで読み取り忘れたり、Google Authenticator のデータを誤って消したり、スマホが壊れてシークレットコードを紛失した場合の復旧作業です。
もし、紛失したユーザー以外で管理者権限のあるWordPressのユーザーがいる場合は、そのアカウントでWordPressにログインしてください。ユーザー一覧ページからシークレットコードを紛失したユーザーのプロフィールの編集を行なってください。下部に二段階認証を有効化するというチェックボックスがあるのでそこのチェックを外してください。
もし、自分しか管理者がいない場合は、functions.phpの一番下に、
<?php
update_user_option( UserID, 'google_authenticator_activate', 'false');
// UserIDは紛失したユーザーのユーザーIDです。
と入力してください。
これで二段階認証を求められずにログインすることができるようになります。ユーザーページからもう一度QRコードを読み込んでシークレットコードを登録してください。
技術的な話
二段階認証をプラグイン化したので全てのコードを載せることは省略します。
今回作るにあたっての考え方や使う技術についての多くは以前紹介しているものが多いので軽く紹介します。
WordPressプラグインについて
今回プラグインにした理由は、テンプレートに依存しないシステムにしたかったからです。
テンプレートのfunctions.php に書き込むことで実装することは可能ですが、ファイルを読み込まなければならなかったり、テンプレートを操作しないでWordPressを使っている場合使いにくいなどのデメリットがあります。
WordPressのテンプレートは意外と簡単に作成することができ、そのことについては以前記事にしました。
ユーザープロフィールページについて
シークレットコードの設定をするプロフィールページは、アクションフックを'show_user_profile' に追加するだけです。フィルターフックとアクションフックについての説明はこちらの記事で詳しく説明しています。
クラスのメソッドをフックにかける時は第二引数は配列にしなければいけないことをよく忘れます。
GitHubではこのディレクトリでプロフィール関連の処理をまとめています。
二段階認証ページについて
二段階認証はWordPressのカスタムルーティングを使ってページを作っています。
GitHubではこのディレクトリにまとめています。
カスタムルーティングについては、今後詳細の記事でまとめようと思います。
まとめ
今回ログイン時に二段階認証を対応するプラグインを作成したのでそれの紹介をしました。
以前駆け出しエンジニア(ほんもの)さんから、ポートフォリオのレビュー依頼をもらったことがありました。WordPressで構築されていて、/wp-admin と打ち込むだけでログイン画面に遷移される初期設定になっています。
結構この状態のままリリースされているサイトは多く、ヒヤヒヤしています。/?author=1と入力すると著者情報も出てしまうのでパスワードの総当たりだけでログインが完了してしまう状態で放置している方々に是非ともこのプラグインを使ってほしいです。
駆け出しエンジニアの方は是非ともプラグインの中身まで目を通して、わからないことがあればDMを送ってほしいです。