Skip to main content
ネイティブアプリケーションは、PKCE を使用した Authorization Code フローを認証フローとして使用し、ログイン後に制御をアプリケーションへ戻すために 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 と呼びます。 最新のモバイル OS は 検証済み HTTPS URI をサポートしており、これを使うと、自分で管理しているウェブサイトのドメインをモバイルアプリに関連付けることができます。検証済み HTTPS URI は、次の名称で知られています。
  • iOS では Universal Links
  • Android では App Links
検証済み HTTPS URI を使用すると、関連付けられた callback URL を処理できるのは対象のアプリケーションのみとなり、機密性の高い認証データへの不正アクセスを防ぐことができます。
Auth0 は、すべてのネイティブアプリケーションで、リダイレクト URI として検証済み HTTPS URI を使用することを 強く推奨 しています。
次の場合、Auth0 は認証トランザクションの結果を受け取るアプリケーションが正当なものかどうかを検証できません。
  • 古いモバイル OS バージョンとの互換性を維持する必要があり、アプリケーションが検証済み HTTPS URI をサポートできない
  • アプリケーションがデスクトップアプリケーションまたは CLI アプリケーションである
OAuth2 for Native Apps 仕様で定義されているとおり、Auth0 にはユーザーに確認プロンプトを表示する仕組みがあります。ユーザーは、認証結果を受け取るアプリケーションが、自分がアクセスしようとしていたものであることを確認します。検証できないコールバック URI が使用されている場合、ユーザーは認証トランザクションごとにアプリケーションの確認を求められます。 確認画面は、次の場合に表示されます。
  1. リクエストに含まれる redirect_uri が、検証できない URI (つまり、カスタム URI スキームまたはループバック URI) を使用している。
  2. 現在のログイントランザクションで、ユーザーにまだ他の画面が表示されていない (たとえば、サードパーティアプリケーションで同意画面が表示される場合や、MFA が必要な場合) 。
このような場合、エンドユーザーには確認プロンプトが表示されます。
アプリのなりすまし対策 - 確認プロンプト
確認プロンプトは、従来の OIDC 非準拠フローでは表示されません。テナントとアプリケーションの保護を強化する方法については、OIDC 準拠の認証を採用するを参照してください。

プロンプトのカスタマイズ

確認プロンプトでは、サードパーティアプリケーション向けの既存の同意画面に対して定義した、カスタムのブランディングと設定が使用されます。詳しくは、Customize Universal Login Page Templates の Prompts セクションを参照してください。
本番環境では、この保護を無効にしないことを Auth0 は強く推奨しています。デバイス上の悪意あるアプリケーションが、ユーザーの操作や何かが起きたことを示す表示が一切ないまま、id_tokensaccess_tokens を要求できてしまう可能性があります。
確認プロンプトは、テナント全体の設定として、またはアプリケーションレベルで設定できます。アプリケーションレベルの設定は、テナント全体の設定より優先されます。 アプリケーションレベル
  1. Auth0 Dashboard > アプリケーション > Application Settings > Advanced > OAuth に移動します
  2. Non-Verifiable Callback URI End-User Confirmation 設定までスクロールします。
  3. プロンプトを有効にするにはトグルをオンにし、無効にするにはトグルをオフにします。
Auth0 Dashboard>Settings>Advanced
グローバル
  1. Auth0 Dashboard > Settings > Advanced に移動します
  2. Non-Verifiable Callback URI End-User Confirmation 設定を探します。
  3. プロンプトを有効にするにはトグルをオンにします。
Auth0 Dashboard>Tenant Settings>Advanced>Skip Custom URI toggle