redirect_uri を用います。URI がデバイスのブラウザーで読み込まれると、通常はアプリケーションが自動的に開き、ユーザーはそのまま操作を続行できます。
従来、モバイルアプリケーションでは カスタム URI スキーム (例: com.mycompany.myapp://oauth2redirect) が使われていました。しかし、カスタム URI スキームには、デバイス上の複数のアプリケーションが同じスキームを登録できるというリスクがあります。モバイル OS には、リダイレクトを受け取るアプリケーションが意図したものであることを保証する組み込みの仕組みがありません。このような状況では、悪意のあるアプリが正規のアプリになりすまして認可レスポンス (トークンを含む) を受け取り、ユーザーはそれに気付かない可能性があります。特に、以前の正規セッションが存在してシングルサインオン (SSO) が有効になっている場合は、追加のユーザー操作が不要なため、このリスクは高まります。このようなシナリオでは、PKCE も実質的にはあまり役に立ちません。悪意のあるアプリケーションがログインフローを開始し、ユーザー操作なしでコールバックを受け取るのを待ててしまうためです。
ローカルマシン上で実行されるアプリケーション (例: デスクトップアプリ、CLI) も、コールバックにループバックインターフェイス (例: http://127.0.0.1:51089/callback または http://localhost:61024/callback) を使用する場合、同様のリスクがあります。この場合、同じマシン上の別のアプリケーションが同じポートで待ち受け、レスポンスを傍受できる可能性があります。
このドキュメントでは、カスタム URI スキームとループバック URI の両方を、いずれのシナリオでも認可サーバーが受信側アプリケーションを検証できないことから、Non-Verifiable Callback URIs と呼びます。
モバイルアプリケーション向けの推奨対策
検証済み HTTPS URI (Universal Links / App Links)
- iOS では Universal Links
- Android では App Links
Auth0 は、すべてのネイティブアプリケーションでリダイレクト URI として検証済み HTTPS URI を使用することを強く推奨しています。
- iOS: Support Universal Links を参照してください。
- Android: Android App Links を参照してください。
すべてのアプリケーションに推奨される対策
- 古いモバイル OS バージョンとの互換性が必要なため、アプリケーションが検証済み HTTPS URI をサポートできない
- アプリケーションがデスクトップアプリケーションまたは CLI アプリケーションである
- リクエスト内の
redirect_uriが検証できない URI (つまり、カスタム URI スキームまたはループバック URI) を使用している。 - 現在のログイントランザクションで、ユーザーにまだ他の画面が表示されていない (たとえば、サードパーティアプリケーションに対して同意画面が表示される場合や、MFA が必要な場合) 。

プロンプトのカスタマイズ
- Auth0 Dashboard > Applications > Application Settings > Advanced > OAuth に移動します。
- Non-Verifiable Callback URI End-User Confirmation 設定までスクロールします。
- プロンプトを有効にするにはトグルをオンにし、無効にするにはトグルをオフにします。

- Auth0 Dashboard > Settings > Advanced に移動します。
- Non-Verifiable Callback URI End-User Confirmation 設定を探します。
- トグルをオンにしてプロンプトを有効にします。
