Auth0のMFA認証をユーザーごとにカスタマイズする
特定のユーザー向けにMFAをカスタマイズ
Auth0では、MFAを使用するようにマークされているユーザーのみに対して実行することが可能です。
例えば、従業員は不要/外部のパートナーは必要といったケースが考えられます。
この動作を行うには
- 多要素認証を常に必要トグルをオフ
- 特定のユーザーまたはアプリケーションのRuleを使用してMFAを有効にする
必要があります。
公式ドキュメント:多要素認証をカスタマイズする
1. 多要素認証を常に必要トグルをオフ
Auth0のダッシュボードの左ペインにある Multifactor Auth
をクリックし、 Always require Multi-factor Authentication
のトグルをオフにします。
2. Rulesの作成
Auth0のダッシュボードの左ペインにある Rules
をクリックし、 CREATE RULE
ボタンを押下します。
Pick a rule template
というルールのテンプレートを選択できる画面に遷移するので、 Empty Rule
というテンプレートを選択します。
Name
を入力し、Script
の部分は一旦そのままにして保存します。
3. Rulesの修正
先ほど作成したRuleを編集します。
ログイン対象ユーザーのapp_metadata
を参照し、MFAが必要かそうでないか判断するロジックを記述します。
以下の例だと、 partner
というグループに所属しているユーザーはMFA認証が行われます。
function (user, context, callback) { // app_metadataにauthorization groupsがなかったらMFAは実行しない if (!user.app_metadata || !user.app_metadata.authorization || !Array.isArray(user.app_metadata.authorization.groups)) { return callback(null, user, context); } const groups = user.app_metadata.authorization.groups; const GROUPS_WITH_MFA = { // MFAが必要なグループ名を記述 'partner': true }; const needsMFA = !!groups.find(function(group) { return GROUPS_WITH_MFA[group]; }); if (needsMFA){ context.multifactor = { provider: 'any', //required // ユーザーはログイン時に常にMFAの入力を求められます。 allowRememberBrowser: false // providerがgoogle-authenticatorまたはduo: ユーザーは30日ごとにMFAの入力を求められます // providerが上記以外: ユーザーは今後30日間MFAをスキップするかどうかを決定できます // allowRememberBrowser: true }; } callback(null, user, context); }
4. Ruleをデバッグしてみる
3で修正したルールをデバッグすることが可能です。
ルールの編集画面の下部にある TRY THIS RULE
をクリックします
MFAが有効になるように、User
の部分を修正します。
TRY
ボタンを押すとレスポンスが返ってきます。
MFAが有効であれば、
"multifactor": { "provider": "any", "allowRememberBrowser": false }
という情報が記述されています。
5. ユーザー情報を編集
実際のユーザーで動きを確認するため、ユーザー情報を修正してみます。
Auth0のダッシュボードの左ペインにある Users & Roles -> Users
をクリックし、 ユーザーを選択するか、新しいユーザーを作成します。
Metadata
の項目にあるapp_metadata
に以下の内容を追加し、保存します。
"authorization": { "groups": [ "partner" ] }
保存後、
任意のアプリケーションのログインURLにアクセスし、Auth0にログインしてみると、partner
を設定したユーザーはMFAが表示され、
そうでないユーザーは表示されずにリダイレクトURL先に遷移されると思います。
まとめ
このユーザーはMFA不要、このユーザーはMFAが必要といったケースを焦点にしました。
Auth0は多様なカスタマイズを行えるため、今回のようなMFAの有無をユーザーごとに変更することも容易に行えます。
ぜひ参考にしていただけると嬉しいです。