[Auth0] 次世代のカスタムロジック実行機能, Actionsを試す ~ Public Beta ~

2020.11.16

11月10日ごろ、Auth0ダッシュボードメニューにActionsというものが追加されました。

Actionsは、Ruleに対応するLoginと、HookのClient Credential Exchangeに対応するM2Mのタイミングでカスタムロジックを記述する仕組みで、下書き保存およびテスト、バージョン管理、より多くの外部モジュールのサポートなどに対応しています。

やってみる

Loginフローをカスタマイズしてみます。

Flowの選択

Auth0ダッシュボードにログインし、ActionsのFlowページに遷移した後、Loginをクリックします。

すると、以下の画面が表示されます。

Login後、Ruleの実行、最後にTokenが発行されるフローが視覚化されていますが、ここにActionを追加してFlowに組み込んでいくことになります。

Actionの作成

Custom ActionsのページでCreateをクリックします。

NameとTriigerを選択します。

作成すると、エディタが表示されます。

この時点ではドラフトの状態です。

Actionの構成

Test

左メニューの▶️アイコンを押すと、書いたコードの実行テストが行えます。

PayloadのセクションにはActionに渡ってくるデータの本文をカスタマイズできます(Loginフローなら、ログインしたユーザーの情報が含まれている)。

Runボタンを押すとActionを実行し、結果が表示されます。

Secrets

左メニューの鍵アイコンをクリックすると、Actionのコードで利用できるシークレットを定義できます。

以下のように、Key/Valueの形で定義できます。

コードないで定義したシークレットにアクセスするには、

context.secrets.SECRET_NAME

で可能です。

Modules

左メニューの箱アイコンをクリックすると、npmレジストリに含まれているNode.jsモジュールを追加できます。

モジュール名、任意のバージョンを決めてインストールできます。

Deploy

Deployボタンを押すと、フローに追加できる状態になります。

バージョン

Actionはデプロイされるごとにバージョン管理されます。 Version Historyボタンを押すと、履歴が表示され、任意のバージョンに戻すことも可能です。

コード補足

Actionにコードを追加する際、

ContextとEventオブジェクトにアクセスできます。詳細は上記ドキュメントを参考にしてください。

Context: シークレットなどのアクションに関する構成情報が格納されます

Event: トリガーイベントに関する情報が格納されます

Returnに何を含めれば?

Actions Blueprints - Beta にActionのサンプルコードが載っていますが、詳細までは記載されていませんでした。

ActionエディタでPostLoginActionの定義を辿っていくと、PostLoginResultとして許可されているオブジェクトがわかりました。

accessToken,idToken,user,commandというオブジェクトが利用できるようです。

M2Mフローの場合は、

 scope,customClaims,commandというオブジェクトが利用できるようです。

フローにActionsを組み込む

Actionを作成した後は、フローにそのアクションをバインドします。 これにより作成したActionをフロー内で実行することができるようになります。

アクションコレクションからアクションをドラッグしてフロービジュアライザーにドロップし、[保存]を選択します。フローのパイプラインに複数のアクションを追加し、ドラッグアンドドロップを使用してそれらの順序を調整できます。

Auth0に登録したアプリケーションでログイン/M2Mを実行すると、追加したActionsのコードが実行されるようになります。

実行時のログ

各フローで実行されたActionのログを、Auth0ダッシュボードのLogsで確認できます。

実行したActionの詳細情報がログに吐き出されるので、エラー時などの調査にも役に立ちます。

また、console.logで出力した情報も書き出されます。

制限事項

アクションには制限があります。

エンティティ

  • 各テナントには、最大100のAction(デプロイ済みと非デプロイの両方を含む)
  • 各Actionには、最大50のバージョン(ドラフトとアクティブの両方)が関連付けられている場合があります。制限に達すると、バージョンが追加されるたびに、最も古いバージョンが削除される
  • 各フローには、最大5つのアクティブなバインドされたActionを含めることができます
  • Secretの各キーの最大長は128文字、各値の最大長は2048文字
  • 各Actionの最大コードサイズは100KB
  • 各Actionには、最大10npmモジュールを含めることができます
  • console.logを使うことで、実行の一部として、最大256文字を永続的に保存
  • ログは1日間保持されます。
  • ログストリーミングはサポートされていません
  • 記載されているログ制限は、サブスクリプションプランに関係なく、ベータ期間中のすべてのお客様に適用される
  • 各セッションには、最大4KBのユーザーメタデータの永続性が
  • 各セッションには、最大4KBのアプリメタデータの永続性

最後に

Actionsは将来的にはRulesとHookの変わりとなるものだと思うので、Betaの段階から色々と触ってみることをお勧めします。 RulesとHookでカスタムコードの記述方法が若干異なっていますが、Actionsで統一されるようになるのは良いと思います。

現在はトリガーがLoginとM2MのClient Credentials Exchangeフローのみですが、今後は現在のHooksにあるトリガー(Send Phone Message,Pre User Registrationなど)も追加されて欲しいですね。