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 は、いずれのケースでも認可サーバーが受信側のアプリケーションを検証できないため、総称して 検証不能なコールバック URI と呼びます。
モバイルアプリケーション向けの推奨対策
検証済み 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 > アプリケーション > Application Settings > Advanced > OAuth に移動します。
- Non-Verifiable Callback URI End-User Confirmation 設定までスクロールします。
- プロンプトを有効にするにはトグルをオンにし、無効にするにはトグルをオフにします。

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