Auth0のActionsでログイン時のIPアドレスを制限してみた

2021.06.15

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

2021年5月14日にAuth0でActionsがGAされました。Actionsは元々提供されていたRulesとHooksを統合して使いやすくした機能です。ログイン時やアカウント登録時など様々なタイミングで順番に複数のカスタムスクリプトを実行することが出来ます。

本記事ではログイン時のIPアドレス制限を実際にやってみます。

カスタムスクリプトを実装

まずはIPアドレス制限のカスタムスクリプトを実装します。ActionsのCustom Actionsから新しいアクションを作成します。

Actions Create Action

カスタムスクリプトを実装してデプロイします。IPアドレス制限では次のようなスクリプトになります。event.client.nameは対象のアプリケーション名に変更してください。

exports.onExecutePostLogin = async (event, api) => {
  if (event.client.name === "My App") {
    if (event.request.ip !== "xxx.xxx.xxx.xxx") {
      api.access.deny(`Access to ${event.client.name} is not allowed. IP Address access restrictions.`);
    }
  }
};

Actions Custom Script

フローを実装

カスタムスクリプトを実行させるタイミングを選択します。ログイン時にカスタムスクリプトを実行させて、IPアドレスを制限したいので「Login」を選択します。

Auth0 Actions Flows

ログインのフロー画面で、右側のリストから先程作成したIPアドレス制限のActionをドラッグ&ドロップで追加します。ここでは他の複数のスクリプトを追加することも出来ます。また、追加されたスクリプトは上から順に実行されます。最後に忘れずに右上のApplyボタンを押して設定を反映しましょう。

Auth0 Actions Login Flow

動作確認

実際にアプリでログインを行います。IPアドレス制限のカスタムスクリプトで指定したIPアドレス以外からログインしようとすると、ログインに失敗することを確認できました。また、ログインに失敗した際には、Auth0のMonitoringからログを確認することが出来ます。

Auth0 Monitoring Logs

まとめ

たったの5分程度で簡単にIPアドレス制限を実装することができました。自前のサーバーを用意すること無く、Auth0のサーバー上でカスタムスクリプトを実行させられるのはとても便利です。

また、今まで分かれていたRulesとHooksの機能が統合されて、スクリプトの実行順序も視覚的に管理できるようになったことで、より分かりやすく設定を調整できるようになったと思います。

参考資料