外部ユーザーストアへのアクセスを保護する
カスタムデータベース接続を使用する場合、Auth0 がユーザーストアに接続できるよう、そのためのインターフェースを提供する必要があります。 ユーザーストアをインターネット経由で広くアクセス可能にする方法では、大きなリスクが生じます。たとえば、SQL などのデータベース用インターフェースは多くの機能を公開するため、誰でも利用できるようにすると、最小権限の原則に違反します。保護された API を介してアクセスを提供する
ユーザーの読み取りやパスワード変更など、カスタムデータベース接続で必要なユーザー管理機能のみを実行する、保護されたエンドポイントを限定的に持つ API を介してアクセスを提供することをお勧めします。 この API を で保護すると、アクションスクリプト内からクライアントクレデンシャルズグラントフローを使用できます。さらに、パフォーマンス向上のため、トークンをglobal オブジェクトにキャッシュして再利用できます。
外部ユーザーストアで利用可能な API がある場合、または独自に実装する場合は、Auth0 を通じて API を登録し、Action を作成して、エンドユーザーからのアクセスを制限できます。
デフォルトでは、認証に成功し、適切な を含めれば、Auth0 は任意の API 向けのトークンを発行できます。アクセストークンの割り当てを制限してユーザーストアの API へのアクセスを制限することで、特定のクライアント資格情報を使用した場合にのみアクセスを許可し、不正使用を防止できます。これにより、悪意のある第三者が /authorize へのリダイレクトを傍受して API の audience を追加する、といったさまざまな攻撃シナリオを軽減できます。
外部ユーザーストアで利用可能な API がなく、実装も現実的でない場合でも、アクションスクリプトを記述して直接通信できます。
ネットワークアクセスを制限する
Auth0 からの受信トラフィックを許可するため、Auth0 のアウトバウンド IP アドレスを含む IP AllowList を使用して、外部ユーザーストアへのアクセスを制限することをお勧めします。 Auth0 のアウトバウンド IP アドレスは、該当する Region 内のすべての Auth0 テナントで共有されるため、このような AllowList をユーザーストアへのアクセスを保護する唯一の手段として使用しないことをお勧めします。代わりに、AllowList は複数のセキュリティ対策の一つとして使用してください。非同期呼び出しと外部呼び出しにタイムアウトを設定する
アクションスクリプト内で外部サービスやAPIを呼び出す場合は、適切な時間が経過したら関数がタイムアウトするように設定し、外部サービスやAPIに到達できない場合はエラーを返すようにしてください。Promiseオブジェクトの例
Promiseオブジェクトの例
この例では、JavaScript組み込みの
fetchメソッドを使用しています。このメソッドはネットワークからリソースを取得し、Promiseオブジェクトを返します。コードはPromiseチェーンを使って記述されています。リクエストに5秒以上かかった場合は、AbortControllerがリクエストをキャンセルします。async関数の例
async関数の例
この例では、JavaScript組み込みの
fetchメソッドを使用しています。このメソッドはネットワークからリソースを取得し、Promiseオブジェクトを返します。コードはasync関数を使って記述されています。リクエストに5秒以上かかった場合は、AbortControllerがリクエストをキャンセルします。callback関数に渡します。トラブルシューティングやデバッグをしやすくするため、内容が具体的にわかるエラーメッセージを使用することをお勧めします。
無名関数を避ける
アクションスクリプトは無名関数として実装できますが、無名関数を使用すると、エラー発生時のデバッグでコールスタックを読み取りにくくなる可能性があるため、名前付き関数を使用することをお勧めします。アイデンティティプロバイダーのトークンを取得する
user オブジェクトが access_token および refresh_token プロパティを返す場合、Auth0 はこれらを他の種類のユーザー情報とは異なる方法で処理します。Auth0 はこれらを user オブジェクトの identities プロパティに保存します。
read:user_idp_tokens スコープを含めます。