Actions の基本
- ログイン中にリクエストが累積するのを防ぐため、HTTP リクエストは可能な限り少なくし、適切なタイムアウト (10 秒未満) を設定します。
-
アプリケーションメタデータ を使用して特定のアプリケーションを絞り込み、Action を実行するかどうかを判断します。
- 例: Action の実行内容を部分的または全面的に変えるための、アプリケーション固有の値やアプリケーションのグループ化に使う値。
-
user_metadata/app_metadataを使用して、ユーザープロファイルにカスタムデータを永続化します。- 例: ユーザー設定や状態値。
-
同じ実行内で post-login トリガー 間でデータを共有するには、トランザクションメタデータ を使用します。
- 例: 外部サービスから取得した値や計算した値のうち、後続の Actions で再利用する必要があり、現在の実行に関連するもの。
-
異なる実行に属する Actions 間で共有するデータには、キャッシュを使用します。
- 例: 外部サービスから取得した値や計算した値のうち、Actions で再利用する必要があり、ユーザーや現在の特定の実行には関連しないもの。
- 検証を提供する Actions や、 をトリガーする Actions が、意図せずまたは悪意をもってバイパスされないようにしてください。
-
Actions では、意図的にエラーをスローしてはいけません。エラーや条件によって処理を停止する必要がある場合は、
api.access.deny()のような適切なapiメソッドを使用します。 -
Authentication API 呼び出しで使用するドメインには
event.request.hostnameを使用します。これは、デフォルトの Auth0 テナントドメインまたは カスタムドメイン のいずれかです。
Actions Modules
- 異なるAction間で関数を再利用する必要があり、コードの重複を防ぎたい場合は、Actions Modules を使用します。
- 可能な場合は、Singleton pattern を実装して Action Module でオブジェクトインスタンスを再利用し、オブジェクトのインスタンス化にかかる時間を削減します。
- コーディング、セキュリティ、ロギング、依存関係、ユーザーデータについては、このドキュメントに記載されている該当するガイドラインに従ってください。
- Action から Action Module を使用する場合は、使用しているモジュールのバージョンを常に把握しておいてください。
新しい Action Module のバージョンを公開しても、Auth0 は Action が参照しているバージョンを自動的にアップグレードしません。これにより、アップグレード後のバージョンが Action と互換性がない場合に生じる不具合を防げます。
コーディングの基本
- 受信したデータや保存済みのデータを比較する際は、必ず厳密等価演算子
===を使用します。 - Action の処理を停止する必要がある場合は、
return文を使用します。 - コード品質を向上させ、問題を自動的に検出するために、ESLint のようなコードリンターや、Semgrep のようなアナライザーを実行します。
セキュリティの基本
- シークレットや機密性の高いコード成果物を、Actions コードの一部として平文で記述しないでください。代わりに、Secrets Manager を使用するか、独自のシークレット管理ツールを Actions コードに統合して利用してください。
- 個人を特定できる情報 (PII) を、URL やエラーメッセージなどで暗号化されていない状態のまま送信しないでください。
- リダイレクトと API 呼び出しには、必ず HTTPS URL を使用してください。
- 可能であれば、IP アドレスを許可リストに追加してください。
- 改ざんされる可能性がある受信データ (URL パラメーター、ユーザーエージェントなど) に注意してください。
防御的コーディング
- エラーを捕捉し、必要に応じて対処します。
- Action の処理を続行すべきでない場合は、ガード節を使用して早期に return します。
ログ
- 機密データ、シークレット、PII は決してログに記録しないでください。
- Action ごとにログに記録する文字数は 256 文字未満に抑えてください。
依存関係
- 信頼でき、継続的にメンテナンスされているパッケージを使用します。
npmの監査機能 またはリポジトリに接続された自動依存関係チェッカーを使用して、未対応の CVE がないか確認します。- 可能な場合は、パッケージの最新バージョンを使用します。
ユーザーデータ
- 機密性の高い用途や厳格なセキュリティが求められる状況で使用する場合は、
event.user.email_verifiedでメールアドレスが確認済みかどうかを確認してください。 - 提供されるユーザープロフィールデータは接続によって異なります。保証されている ユーザープロフィールフィールド は
user_idのみです。
ログインフローにおける Redirect Actions
-
api.redirect.encodeTokenで返されるトークンは署名されますが、暗号化はされません。そのため、機密データや個人を特定できる情報 (PII) をペイロードに含めないでください。 -
ログインフローはログイン成功後に実行され、次のケースが含まれます。
- SSO (ログインフォームは表示されません)
- サイレント認証 (認可 URL で
prompt=noneを使用してセッションを確認する) - リフレッシュトークンの交換 (ユーザー操作なし)
- RO パスワードグラント (アプリケーションが収集した認証情報をトークンエンドポイントに送って交換する)
- リダイレクトを行う Actions では、上記のケースを考慮し、ユーザー操作が必要な場合はアクセスを拒否するか、意図的にバイパスを許可する必要があります。その場合、負担はログインを要求するアプリケーション側が負います。