ユーザー設定画面に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 ActionsやAuth0 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”) } };