Action スクリプトは、サーバーレス Webtask コンテナのインスタンス内で、呼び出された一連の JavaScript 関数として実行されます。これに伴い、特定の実行環境に加えて、Webtask コンテナと Auth0 (Auth0 テナント自体) から提供される各種アーティファクトも利用できます。
Auth0 のサーバーレス Webtask コンテナでは、幅広い npm モジュールを利用できます。npm モジュールを使用すると、Action スクリプトの実装コード全体のサイズを削減できるだけでなく、さまざまな構築済み機能も利用できます。
デフォルトでは、多数の一般公開されている npm モジュールがそのままサポートされています。この一覧は、潜在的なセキュリティ上の懸念がないかを確認したうえで作成されています。サポートされている npm モジュールを確認するには、Can I require: Auth0 Extensibility を参照してください。
そのままではサポートされていない npm モジュールが必要な場合は、Auth0 Extensibility portal または Auth0 の担当者を通じてリクエストできます。Auth0 はそのリクエストを評価して適合性を判断します。未解決のリクエストをエスカレーションする必要がある場合は、Auth0 support portal からサポート チケットを作成してください。現在、Auth0 ではプライベート リポジトリーの npm モジュールの使用はサポートされていません。
Auth0 の Action スクリプトは環境変数の概念をサポートしており、グローバルに利用可能な configuration オブジェクトを介してアクセスできます。configuration オブジェクトは読み取り専用として扱う必要があり、認証情報や外部 ID ストアへのアクセスに使用する API キーなどの機密情報の保存に使用してください。これにより、セキュリティ上重要な値を Action スクリプトにハードコードせずに済みます。
configuration オブジェクトは、テナントごとの値を持つ変数を定義できるため、複数の環境の設定 など、採用している Software Development Life Cycle (SDLC) のベストプラクティス戦略の実現にも使用できます。これにより、実行するテナントによって変わる可能性のある値を Action スクリプトにハードコードすることを防げます。
Auth0 のサーバーレス Webtask コンテナは、各 Auth0 テナントに関連付けられたプールからプロビジョニングされます。各コンテナインスタンスではグローバルオブジェクトを利用でき、そのコンテナインスタンス内で実行されるすべての Action スクリプトからアクセスできます。グローバルオブジェクトはコンテナごとに固有のグローバル変数として機能し、そのコンテナインスタンス内で実行されるすべての Action スクリプトで使用できる情報や、場合によっては関数を定義するために利用できます。
つまり、グローバルオブジェクトは、ユーザー固有ではない、取得コストの高いリソースをキャッシュするために使用できます。たとえば、ユーザー固有ではない機能を提供するサードパーティ API (ロギング API など) 向けの を保存できます。あるいは、Auth0 で定義し、Client Credentials フローで取得した、独自のユーザー固有ではない API 用のアクセストークンを保存することもできます。
Action スクリプトは、すでに稼働中のいずれかのコンテナインスタンス、または新しく作成されたコンテナインスタンス (その後プールに追加される可能性があります) で実行される場合があります。Auth0 では、Action スクリプトの実行にコンテナアフィニティはありません。つまり、グローバルオブジェクトにユーザー固有の情報を保存することは避け、グローバルオブジェクト内で行う宣言には必ず初期化処理も含めるようにしてください。
Webtask コンテナがリサイクルされるたびに、または新しい Webtask コンテナがインスタンス化されるたびに、そのグローバルオブジェクトはリセットされます。したがって、コンテナに関連付けられたグローバルオブジェクト内で代入を宣言する場合は、初期化処理も含める必要があります。パフォーマンスの柔軟性を確保するため、サーバーレス Webtask コンテナは Auth0 によってアドホックにプロビジョニングされ、さらにさまざまなリサイクルポリシーの対象にもなります。一般に、グローバルオブジェクトの存続期間は 20 分を超えないものとして考えることを推奨します。
- データベースに、id、nickname、email、password などのユーザープロファイル属性を保存するための適切なフィールドがあることを確認してください。Auth0 のユーザープロファイルスキーマと想定されるフィールドの詳細については、Normalized User Profiles を参照してください。ユーザープロファイルの更新方法については、Update User Profiles Using Your Database を参照してください。
- トラブルシューティングのために、カスタムデータベース接続で発生したエラーを返すことができます。
- 返されたユーザープロファイル内の
id (または user_id) プロパティは、Auth0 がユーザーを識別するために使用します。複数のカスタムデータベース接続を使用している場合は、ユーザー ID の衝突を避けるため、id の値を すべてのカスタムデータベース接続全体で一意 にする必要があります。推奨事項は、id の値の先頭に接続名 (空白を除く) を付けることです。ユーザー ID の詳細については、Identify Users を参照してください。
- Auth0 でホストされるユーザーストアと比べて、レイテンシーは大きくなります。
- データベースまたはサービスは、Auth0 サーバーから到達可能である必要があります。ストアがファイアウォールの内側にある場合は、受信接続を構成する必要があります。
カスタム Database スクリプトのランタイムバージョンは、Extensibility セクションの Dashboard > Settings > Advanced で設定します。
特定のランタイムバージョンで個別のカスタムデータベーススクリプトをテストするには、次の手順に従います。
- Authentication > Database に移動します。
- カスタムスクリプトを定義した Database 接続を選択します。
- 選択したデータベース接続のページで、Custom Database タブを選択します。
- ページの Database Action Scripts セクションまでスクロールします。
- 各タブで、確認するスクリプト (例: Login、Create など) を選択します。
- Save and Try を選択します。特定のテストパラメーターとサンプルのコンテキスト詳細を含むモーダルが表示されるので、必要に応じて更新します。
- モーダルで Try を選択すると、特定の Node バージョンを選択するためのドロップダウンセレクターが開きます。
- 目的の Node バージョンを選択するとテストが実行され、結果は同じ画面上のメッセージに表示されます。