concrete5 サイトに二要素認証ログイン機能を追加できる、Two-Factor Security Login 有償アドオンのレビューです。
モロッコ在住で2011年から concrete5 コミュニティメンバーとして活動している Nour Akalay 氏が作成した有償アドオンです。 Akalay 氏は、2018年9月に私がアメリカ・ポートランドに訪問した時にもお会いし何日か一緒に過ごし、concrete5 について語り合ってもいます。今回のレビューに当たり、アドオンを提供していただきました。
バージョン 1.7.1 から日本語に翻訳しています。
Two-Factor Security Login とは concrete5 に、通常の ID かメールアドレスとパスワードの認証後に MFA トークン生成アプリを使って生成された6桁の数字コードの認証を行うというアドオンです。
アドオンの説明には「Google Authenticator」と書かれていますが、他の MFA アプリ、Microsoft Authenticator, Duo Mobile, Authy などでも動作します。
目次 |
MFA (Multifactor Authentication) とは
日本語では「多要素認証」と呼ばれる仕組みです。ID、パスワードの他にアプリなどで作ったワンタイムパスワードを必須としたり、生体認証を必須としたりと本人しか知り得ない要素を複数用いる認証方式になります。
2つの要素を組み合わせた認証の場合は「二要素認証」や「二段階認証」などと呼ばれています。
Two-Factor Security Login の二要素認証の方法
本アドオンは、様々なサービスで採用されている数字トークン生成の方式を2つ目の認証方法として使っています。
設定画面でテキストとセキュリティキーを生成し、それを元に、現在の時刻を元にランダムな6桁の数字を生成します。
生成された数字は1分の有効期限があり、ユーザーは1分以内に入力する必要があります。(設定で有効期限を緩和することも可能です)
それでは、サイトに Two-Factor Security Login アドオン (以後 2FAアドオン) を導入していく方法を解説します。
インストール方法
今回、動作確認は、PHP7.3.11 上で動く concrete5 8.5.4 でバージョン 1.8.0 を使って行いました。
アドオンをマーケットプレイスから購入し、インストール、管理画面で有効化します。
日本語化の方法
インストール直後は英語表記です。このアドオンを日本語化するには、対応する日本語翻訳ファイルをサイトにインストールする必要があります。これは管理画面でインストールすることが可能です。
管理画面 > システムと設定 > 基本 > 言語 ページを表示します。
ページ右上にある [言語のインストール/更新] をクリックします。
言語を更新 ページが表示されます。ここでは、concrete5 本体やインストール済みのアドオンの翻訳ファイルを更新することができます。「concrete5」のリンクをクリックすると、concrete5本体の翻訳ファイルリストが非表示になりますので、そちらをクリックしてください。
「2FA - Two-Factor Login Security」のリンクをクリックして、翻訳ファイルリストを表示します。下図の赤枠の部分に表示される「インストール」ボタンをクリックします。
※ 下図は、すでに日本語翻訳ファイルがインストールされているためボタンが表示されていない状態です。
インストールが完了するとボタンがクリックできなくなります。これで翻訳ファイルのインストールは完了です。
二要素認証機能の設定
実は、アドオンをインストールしただけではすぐに二要素認証機能を利用することができません。機能の有効化をする必要があるのですが、その前に設定を行いましょう。
管理画面に Two-Factor Login Protection のメニューが現れるので、クリックし一般設定ページに移動します。
サイト全体の設定
一般設定ページでは、サイト全体の設定をすることができます。
サイト全体に適用できる設定の概要は以下のとおりです。
運用に応じて設定を行います。
リラックスモードを隠す | 通常、二要素認証で作成されるコードは有効期限が1分程度ですが、このリラックスモードを有効にすると2.5分ほどに時間が延長されます。 このモードをユーザー側で選択させることを可能とするかを設定できます。 |
---|---|
失敗ポイントを隠す | IDやパスワードを間違えたか、認証コード入力を間違えたのかをユーザーに伝えないようにするかを設定できます。 |
IPブラックリストの管理 | concrete5 のデフォルト機能に、ログイン失敗を繰り返した IP アドレスを自動的にブロックする機能があります。その失敗数に認証コード間違いを含めるかどうかを設定できます。 |
緊急パスワードを許可 | もしもなにかの理由(スマホを水没させた)などの理由で、2FAアプリ (Authy, Google Authenticator 他)が使えなくなった時に、緊急用に1回だけ使える緊急パスワードを許可する設定です。 注意: 便利な機能ですが、緊急パスワードはセキュリティリスクに繋がりやすいです。許可する場合はそのリスクに留意してください。 |
緊急パスワード通知 | 緊急パスワードが使用された場合に管理者と使用したユーザーへ通知するメールアドレスと、差出人名を設定することができます。 |
必要な設定にチェックを入れる、または入力して、ページ下にある [設定を保存] をクリックして設定内容を保存しましょう。これでサイト全体の設定は完了です。
二要素認証機能を有効化する
有効化のところで [二要素認証を有効化] という緑色のボタンをクリックすると、サイトで二要素認証ログインが利用できるようになります。
これで、アドオンのインストールは完了です。
※ 開発者向けの注意点
concrete5 デフォルトのログイン認証にカスタマイズをしているサイトは気をつけてください。
本アドオンは 5.7.x から動作保証をしています。その関係で、この有効化作業をすると /application/authentication/concrete フォルダに concrete5 コアの認証コントローラーファイルをオーバーライドするようになっているため、カスタマイズが消える可能性があります。
さっそく認証を使ってみよう!…その前に
インストールまで完了したら、すぐに使える…というわけではありません。
2FA アドオンを有効化にした上で、さらにユーザーが二要素認証を利用できるようにするための設定が必要になります。
二要素認証の有効化方法を選んで設定する
ユーザーごとに 2FA アドオンを有効化していく作業を行います。
方法は3つあります。
- 管理画面のメンバー一覧から有効化する
- ユーザー登録時やプロフィール編集画面からユーザーに有効化させる
- Two-Factor Authenticator ブロックをページの中に設置しユーザーに自分で有効化させる
1. 管理画面のメンバー一覧から有効化する
管理画面にアクセスできる権限を持つユーザーのみができる方法です。この方法は、管理画面にアクセスできないユーザーは自分で対応することができません。
管理画面にアクセスさせたくない場合は他の方法を取るか、権限を持つユーザーと一緒に有効化作業を行う必要があります。
管理画面のメンバーページより、二要素認証を有効にしたいユーザーをクリックします。
ユーザー個別の編集画面のカスタム「Two-Factor Login Protection Setting」の項目をクリックするとウインドウがポップアップされます。
- 「このアカウントの二要素認証を有効にする。」にチェック
- 「説明」欄にテキストを入力
- [新しいシークレットキーを生成] をクリック
- [QRコードを表示・非表示] をクリック
- 表示された QR コードを該当するユーザーのスマホアプリ(Authy, Google Authenticator等)で読み込む
- 「コード認証」欄にアプリに表示されている確認コードを入力し、ポップアップの「✓」をクリック
「Two-Factor Login Protection Setting」の項目に「TSA有効」と表示されればOKです。
「TSA無効」の場合は、コード認証を設定した際に有効期限切れが発生した可能性があります。もう一度、コード認証を実施してください。
2. ユーザー登録時やプロフィール編集画面からユーザーに有効化させる
2FA アドオンの設定は concrete5 の標準のユーザー属性を使っているため、concrete5 標準のユーザー登録ページや、一般ユーザーのユーザー編集画面でユーザーに自分で設定してもらうことも可能です。
管理画面 > メンバー > 属性 ページに移動します。
「Two-Factor Login Protection Setting」属性をクリックします。
ユーザー属性のオプションの編集モード、新規ユーザー登録の設定を必要に応じて変更します。
ここで編集モードの「プロフィールで編集可能&必須項目」をクリックすると、ユーザー全員が次回ログイン時に強制的に設定を促すことができ、設定を完了しない限りログインできなくなります。
全員に強制させたい時には有効です。
3. Two-Factor Authenticator ブロックをページの中に設置しユーザーに自分で有効化させる
ユーザーに自分で二要素認証を有効化してほしい。でもサイトに登録されているユーザーのうち、編集ユーザーにのみ二要素認証を実施して、一般ユーザーには二要素認証は使わせたくない。そんなケースに有効です。
「編集ユーザーのみ」など特定のグループにだけ表示権限を与えたページを作成します。
そのページに下記 Two-Factor Authentication ブロックを設置します。
すると「このブロックには設定がありません。クリックし保存すると使用開始できます。」というポップアップが表示されます。ポップアップ下にある [新規] をクリックしましょう。
編集モード中は設定ブロックの内容が表示できませんので、ページを保存または公開して、編集モードを終了します。
これで、ブロックの設置は完了です。
そうすると、ログインしているユーザーが自分で 2FA の設定ができるブロックを設置できます。有効化の手順は、 1. 管理画面のメンバー一覧から有効化する で紹介した手順と同じです。
ログイン時にユーザーのグループを判別して、まだ 2FA を設定していないユーザーは、設置されたページに強制的にリダイレクトをさせるカスタムコードを埋め込み、特定のグループだけ強制的に二要素認証を有効化させるなどのカスタマイズができると思います。
実際にログインしてみよう
設定をした後、通常のログインをしたあとに、認証コード入力画面が下記のように現れます。
そこでアプリを起動し、認証コードを生成・コードを入力してください。[コードを認証] をクリックすると、ログインできるようになります。
一時的に無効化 or アンインストールしたいときは
最後に一時的に二要素認証を無効化したい & アンインストールしたい場合の紹介です。
設定画面から無効化することで、2FA アドオンを一時的に解除できます。
緊急アンインストールする方法などは、管理画面 > Two-Factor Login Protection > ヘルプ&FAQ ページに書かれています。
ただ、インストール時と同じように、アンインストール時は、/application/authentication フォルダのファイルを書き換えたりするので、注意が必要です。
以上、concrete5 サイトのセキュリティを向上させる Two-Factor Security Login の紹介でした。
おまけ:作者 Akalay 氏について
僕が 2018 年に Akalay さんのインタビュー動画を撮影し concrete5 公式 YouTube チャンネルにアップしています。
長年 concrete5 を利用し、マーケットプレイスアドオンの審査員としても活躍しています。
信頼できるメンバーの一人です。