2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Auth0でSMS認証用の電話番号が登録されているユーザーだけ多要素認証(SMS認証)を有効化する

Posted at

前回の記事で、Auth0を利用するアプリからSMS認証用の電話番号を更新する機能を考えたので
今度は、電話番号を登録しているユーザーだけ多要素認証(SMS認証)を実施するようにRulesを設定してみました。

設定内容

Auth0のMFA設定

Auth0のMFA設定のFactorsをSMSのみ有効化する。

スクリーンショット 2020-02-08 0.35.26.png

Rulesの設定

以下のコードをRulesに設定します。

function (user, context, callback) {
  const request = require('request');

  const authenticatorSearchUrl = auth0.baseUrl + '/users';

  request({
    url: authenticatorSearchUrl + '/' + user.user_id + '/enrollments',
    headers: {
      Authorization: 'Bearer ' + auth0.accessToken
    },
  },
  function(err, response, body) {
    if (err) return callback(err);
    if (response.statusCode !== 200) return callback(new Error(body));

    var data = JSON.parse(body);
    
    data = data.filter(function(u) {
      return (u.auth_method === 'sms') && (u.status === 'confirmed');
    });

    if (data.length > 0) {
      context.multifactor = {
      	provider: 'any',
      	allowRememberBrowser: true
    	};
    }
    callback(null, user, context);
  });
}

注意点

前回の記事に書いた電話番号の削除方法で登録されている有効な電話番号を全て削除してしまうと
SMS認証が発動しなくなります。

元々、電話番号が登録されているのであれば、そのユーザーはリカバリーコードを保持しているはずなので
SMS認証がスキップされるのではなく、リカバリーコードの入力を求められるべきかと思いますが、このRulesの実装ではそれが実現できていません。

電話番号の削除機能を実装するにしても
一度電話番号を登録したら、その後全ての電話番号は削除できないようにして
少なくとも、有効な電話番号が一つは残るようにしておいた方が良いかもしれません。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?