[Auth0] 次世代のカスタムロジック実行機能, Actionsを試す ~ Public Beta ~
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など)も追加されて欲しいですね。