$shibayu36->blog;

クラスター株式会社のソフトウェアエンジニアです。エンジニアリングや読書などについて書いています。

Auth0でユーザーがMFAの設定をしている時のみMFA検証フォームを出す

ユーザー設定画面にMFAの設定画面があり、それが設定されているときだけログイン後にMFAのフォームを出したいという要求はよくある。これをAuth0を使っている場合に達成したかった。しかし、Enable Multi-Factor Authenticationなどを見ても、全体に有効/無効しか切り替えられないようで困っていた。

いろいろ調べたところやる方法が分かったのでメモしておく。

ユーザー向けのMFA設定画面を自分のアプリケーションに実装する方法

まずユーザー向けのMFA設定画面を自分のアプリケーションに実装するには、Auth0のMFAリソースに対する権限を持ったアクセストークンを取得する必要がある。詳しくはManage Authenticator Factors with Auth0 MFA APIに書かれているが

  • Auth0のApplication設定画面でGrant TypesにMFAを追加
  • ログインなどのリクエスト時に、audienceの指定を https://YOUR_DOMAIN/mfa/とする。さらにScopesを適切につける。関係するのはenroll, read:authenticators, remove:authenticatorsの三つ

これで取得したアクセストークンであれば、MFAのenrollや登録したMFA認証の一覧取得などをAPI経由で行えるようになる。このAPIを使ってユーザー向けの設定画面を実装すれば良い。

MFAを設定している場合だけログイン後にMFA検証フォームを出す

Auth0 ActionsAuth0 Rulesを使う必要がある。自分はActionsを使って実装してみた。

event.user.multifactorにユーザーがenrollしているMFAのプロバイダ一覧が入っているので、一つでも設定していたらフォームを出すようにする。以下のコードで可能。

exports.onExecutePostLogin = async (event, api) => {
  if (event.user.multifactor && event.user.multifactor.length > 0) {
    api.multifactor.enable(“any”)
  }
};