Actionsのコーディングガイドライン

以下のガイドラインに従って、効率の良い、安全かつ明確なActionsコードを記述し、合理化された運用環境を実現します。

Actionsの基本事項

  • できるだけ最小限のHTTP要求ト数を使用し、妥当なタイムアウト(10秒未満)を設定してログイン中に要求が蓄積されないようにします。

  • アプリケーションメタデータを使用して、アクションを実行するべきかどうかを判断するために、特定のアプリケーションに対してフィルター処理を行います。

  • 検証の実施やMFAのトリガーを行うアクションが、意図せずまたは悪意のある方法でバイパスされることがないようにします。

  • アクションで意図的にエラーを発生させてはなりません。エラーまたは条件が原因でプロセスが停止した場合は、適切なapiメソッド(api.access.deny()など)を使用します。

  • Authentication API呼び出し用のドメインには、event.request.hostnameを使用します。デフォルトのAuth0テナントドメイン、またはカスタムドメインを指定できます。

コーディングの基本事項

  • 受信データまたは保存データを使って、厳密等価演算子===のチェックを行います。

  • アクションのプロセスが停止する必要がある場合は、returnステートメントを使用します。

  • ESLintなどのコードリンターやSemgrepなどの解析ツールを実行してコード品質を高め、問題を自動検出します。

セキュリティの基本事項

  • シークレットや機微コードアーティファクトをアクションコードの一部としてテキスト形式で記述しないでください。代わりに、シークレットマネージャーを使用するか、独自のマネージャーをアクションコード内で統合して利用します。

  • 暗号化されていない個人識別情報(PII)をURLやエラーメッセージなどで丸見えの状態で転送しないでください。

  • リダイレクトとAPI呼び出しには、必ずHTTPS URLを使用します。

  • 可能な場合、IPアドレスを許可リストに追加します。

  • (URLパラメーター、ユーザーエージェントなどの)受信データが改ざんされていないか注意します。

防御的コーディング

  • エラーをキャッチして、必要に応じて対処します。

  • ガード節を使用し、アクション処理を続行するべきでない場合は、早期リターンします。

ロギング

  • 機微データやシークレット、PIIをログに記録してはなりません。

  • アクションごとにログされる文字数は最大256文字です。

依存関係

  • 管理された信頼できるパッケージを使用します。

  • npmの監査機能またはリポジトリに接続された依存関係チェッカーを使用して、未解決CVEがないか調べます。

  • 可能な場合、最新バージョンのパッケージを使用します。

ユーザーデータ

  • メールが機密性または高い安全性が要求される状況下で使用されている場合、event.user.email_verifiedで検証されているかどうかを確認します。

  • 接続ごとに提供されるユーザープロファイルデータもさまざまです。唯一保証されているユーザープロファイルフィールドuser_idです。

ログインフローのリダイレクトアクション

  • api.redirect.encodeTokenによって返されるトークンは署名されますが、暗号化されません。そのため、機微データやPIIはペイロードに含めないでください。

  • ログインに成功した後、以下を含むログインフローが実行されます。

    • SSO(ログインフォームは表示されない)

    • サイレント認証(認可URL内のprompt=noneを使ってセッションをチェックする)

    • リフレッシュトークン交換(ユーザーインタラクションなし)

    • ROパスワード付与(資格情報はアプリケーションから収集され、トークンエンドポイントと交換される)

  • リダイレクトするアクションは上記を考慮に入れ、インタラクションが必要な場合にアクセスを拒否するか、バイパスを意図的に許可する必要がありますが、これによってログインを要求するアプリケーションに負担がかかってきます。