メインコンテンツへスキップ
Resource Owner Password (ROP) Flow ではアプリケーションがユーザーのパスワードを扱うため、サードパーティのクライアントで使用してはなりません。
推奨はしていませんが、高い信頼を置けるアプリケーションであれば、Resource Owner Password Flow ( Password Grant または ROPG と呼ばれることもあります) を使用してサーバーサイド API を呼び出すことができます。このフローでは通常、インタラクティブなフォームを使って、ユーザーに認証情報 (username とパスワード) の入力を求めます。ブルートフォース保護が有効な場合、Auth0 が認証情報を検証する際に、攻撃の有無を確認し、攻撃が検出された場合は適切な対応を行うこともあります。 ただし、このフローをと組み合わせて使用すると、一部の機能が正常に動作しない場合があります。一方で、よくある問題のいくつかは回避できます。

アタックプロテクションとサーバーサイド API

ブルートフォース保護とは、ユーザーの IP アドレスに依存しています。サーバーから API を呼び出す場合、Auth0 はサーバーの IP アドレスをユーザーの IP アドレスとして扱い、その情報をブルートフォース保護および不審な IP スロットリング機能への入力として使用します。その結果、誤検知が発生し、正当なリクエストに対してアタックプロテクションがユーザーをブロックしたり、警告を発したりする可能性があります。 これを回避するには、ユーザーの IP アドレスを認証情報とともに Auth0 に送信し、その IP アドレスを信頼するようアプリケーションを設定してください。
セキュリティ上の理由により、この方法で設定できるのは、認証済みアプリケーション (クライアントシークレットを使用して認証するものなど) に限られます。認証済みアプリケーションは、保護されたリソースからのみ使用する必要があり、通常はサーバーサイドで使用されます。シークレットを保存できないため、ネイティブアプリケーションやシングルページアプリケーション (SPA) では使用しないでください。

IP アドレスを信頼するようアプリケーションを設定する

Regular Web Applicationまたはマシン間アプリケーションのいずれかを登録します。アプリケーションの設定時に、次の操作を行います。
  1. Credentials で、Authentication Method として None 以外を選択します。
  2. Settings > Advanced SettingsOAuth タブで、Trust Token Endpoint IP Header を有効にします。これにより、auth0-forwarded-for ヘッダーが、ブルートフォース保護のためにユーザーの IP アドレスの信頼できる送信元として扱われます。この設定は、認証されないアプリケーションでは使用できません。

サーバーからユーザーの IP アドレスを送信する

  1. Resource Owner Password Flow を使用してトークンをリクエストする場合は、ユーザーの IP アドレスを値として含む auth0-forwarded-for ヘッダーを追加してください。指定する IP アドレスが実際にそのユーザーのものであることを必ず確認してください。
    auth0-forwarded-for のようなヘッダー (または一般に、アプリケーションから送られるデータ) をユーザーの IP アドレスの情報源として信頼することにはリスクがあります。このヘッダーは簡単に偽装でき、アタックプロテクションの検証を回避できてしまうため、信頼できると確信できる場合にのみ使用してください。
  2. ブルートフォース保護と不審な IP スロットリングがトリガーされる際に無視する IP の許可リストを指定します。

ブルートフォース保護と不審な IP スロットリングの許可リスト

認証済みアプリケーションが auth0-forwarded-for ヘッダーを送信するよう構成されている場合:
  • auth0-forwarded-for ヘッダーに含まれる IP アドレスのみが、ブルートフォース保護と不審な IP スロットリングの許可リストに対してチェックされます。
  • プロキシの IP アドレスはブルートフォース保護と不審な IP スロットリングでは無視されるため、許可リストに追加する必要はありません。
  • プロキシを使用する特定のクライアントをブルートフォース保護または不審な IP スロットリングの対象外にする必要がある場合は、それらを許可リストに追加してください。
auth0-forwarded-for ヘッダーは、クライアントシークレットを使用した認証済みの呼び出しでのみ受け付けられます。アプリケーションが認証されていない場合、または auth0-forwarded-for ヘッダーを送信するように構成されていない場合:
  • 各リクエストの送信元 IP アドレスが、ブルートフォース保護と不審な IP スロットリングの許可リストに対してチェックされます。
  • IP プロキシを許可リストに追加すると、そのプロキシを経由するすべてのトラフィックがブルートフォース保護と不審な IP スロットリングの対象外になります。通常、これは意図した動作ではありません。

漏えいしたパスワードの検出のレスポンスを処理する

テナントで Breached Password Detection を有効にしている場合は、Auth0 Authentication API からのレスポンスを適切に処理できるよう、アプリケーションを設定する必要があります。 たとえば、ROP フローでパスワードを送信した際に、Auth0 がそのパスワードの漏えいを検出すると、Authentication API は HTTP 401 Unauthorized ステータスコードと次のレスポンスボディを返します。
{
    "error": "password_leaked",
    "error_description": "This login attempt has been blocked because the password you're using was previously disclosed through a data breach (not in this application). Please check your email for more information."
}
アプリケーションはこのエラーを処理し、ユーザーにメッセージを表示して、インタラクティブなパスワードリセットフローをトリガーする必要があります。

ログで確認する

設定が正しく機能している場合、ログに次の内容が表示されます。
type:  sepft
...
ip:  <ip from auth0-forwarded-for header>
client_ip:  <ip of actual client/proxy>
...

詳しくはこちら