Skip to main content

外部ユーザーストアへのアクセスを保護する

カスタムデータベース接続を使用する場合、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 オブジェクトを返す組み込みの JavaScript fetch メソッドを、promise chains を使用して記述しています。
この例では、ネットワークからリソースを取得して Promise オブジェクトを返す組み込みの JavaScript fetch メソッドを、async functions を使用して記述しています。
カスタムデータベースアクションスクリプトからエラーを返すには、 callback 関数 にエラーを渡します。トラブルシューティングやデバッグに役立つよう、内容がわかりやすいエラーメッセージを使用することをおすすめします。

無名関数を避ける

アクションスクリプトは無名関数として実装できますが、無名関数を使用すると、エラー発生時のデバッグでコールスタックを読み取りにくくなる可能性があるため、名前付き関数を使用することをお勧めします。

アイデンティティプロバイダーのトークンを取得する

user オブジェクトが access_token および refresh_token プロパティを返す場合、Auth0 はこれらを他の種類のユーザー情報とは異なる方法で処理します。Auth0 はこれらを user オブジェクトの identities プロパティに保存します。
Auth0 を使用してこれらのプロパティのいずれかを取得するには、アクセストークンをリクエストする際に read:user_idp_tokens スコープを含めます。