Auth0のMFA認証をユーザーごとにカスタマイズする

2020.01.16

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

特定のユーザー向けに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の有無をユーザーごとに変更することも容易に行えます。

ぜひ参考にしていただけると嬉しいです。

参考