Resource Owner Password (ROP) Flowではアプリケーションがユーザーのパスワードを処理するため、サードパーティのクライアントで使用してはなりません。
推奨はしていませんが、高い信頼性が求められるアプリケーションでは、 Password Flow (OAuth 2.0 RFC 6749, section 4.3 で定義されており、Resource Owner Password Grant または ROPG と呼ばれることもあります) を使用できます。このフローでは通常、インタラクティブなフォームを使って、ユーザーに認証情報 (username/メールアドレス/電話番号とパスワード) の入力を求めます。認証情報はバックエンドに送信され、と交換される前に将来の利用のために保存される可能性があるため、アプリケーションがこの情報を完全に信頼できることが不可欠です。
この条件を満たしている場合でも、Resource Owner Password Flowを使用すべきなのは、リダイレクトベースのフロー (Authorization Code Flow など) を利用できない場合に限られます。
- ユーザーがアプリケーション内の Login をクリックし、認証情報を入力します。
- アプリケーションがユーザーの認証情報を Auth0 の認可サーバー (
/oauth/token エンドポイント) に送信します。
- Auth0 の認可サーバーが認証情報を検証します。
- Auth0 の認可サーバーがアクセストークン (必要に応じてリフレッシュトークンも) を返します。
- アプリケーションはアクセストークンを使用して API を呼び出し、ユーザーに関する情報にアクセスできます。
- API が要求されたデータを返します。
Resource Owner Password Flow を実装する最も簡単な方法は、API エンドポイントの使用方法を解説したチュートリアル「Resource Owner Password Flow を使用して API を呼び出す」に従うことです。
Auth0 では、Resource Owner Password グラント と同様の機能を提供する拡張 グラント を利用できます。この グラント では、個別のユーザーディレクトリ (それぞれ別個の接続に対応) を維持したまま、フロー中に使用するディレクトリを指定できます。
たとえば、アプリケーションのログイン UI にドロップダウンを表示し、ユーザーが自分のユーザータイプとして Employees または Customers を選択できるようにしたいとします。この場合、Employees と Customers を realm として設定し (それぞれに対応する接続も設定) 、従業員と顧客の認証情報を別々のユーザーディレクトリに保持できます。トークンをリクエストするときは、ユーザーの認証情報とあわせて realm の値を送信します。送信された realm は、パスワードの検証に使用されます。
この拡張 グラント の実装の詳細については、Call Your API Using Resource Owner Password Flow: Configure Realm Support を参照してください。
Rules は、Resource Owner Password Flow (Realm 拡張グラントを含む) で実行されます。ただし、リダイレクトルールは動作しません。ルールで context.redirect を指定してリダイレクトを実行しようとすると、認証フローでエラーが返されます。Rules の詳細については、Auth0 Rules を参照してください。リダイレクトルールの詳細については、Redirect Users from Within Rules を参照してください。
Resource Owner Password Flow を使用する必要があり、より強固な認証が必要な場合は、 (MFA) を追加できます。詳しくは、MFA を使用して Resource Owner Password Flow で認証する を参照してください。
とともに Resource Owner Password Flow を使用する場合、一部の機能が正常に動作しないことがあります。ただし、一般的ないくつかの問題は回避できます。詳しくは、Resource Owner Password Flow と攻撃対策でよくある問題を回避するを参照してください。