> ## Documentation Index
> Fetch the complete documentation index at: https://docs-dev-feat-init-gt-translations.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> 認証データの正当性を検証するために、カスタム URL スキームではなくUniversal Linksを使用する方法について説明します。

# アプリケーションのなりすまし対策

ネイティブアプリケーションは、[PKCE を使用した Authorization Code フロー](/docs/ja-jp/get-started/authentication-and-authorization-flow/authorization-code-flow-with-pkce)を認証フローとして使用し、ログイン後に制御をアプリケーションへ戻すために `redirect_uri` を使用します。URI がデバイスのブラウザーで読み込まれると、通常はアプリケーションが自動的に開き、ユーザーはそのまま操作を続けられます。

従来、モバイルアプリケーションでは [カスタム URI スキーム](https://developers.google.com/identity/protocols/oauth2/native-app#installed_app_redirect_methods) (例: `com.mycompany.myapp://oauth2redirect`) が使われてきました。しかし、カスタム URI スキームには、デバイス上の複数のアプリケーションが同じスキームを登録できてしまうというリスクがあります。モバイル OS には、リダイレクトを受け取るアプリケーションが意図したものであることを保証する組み込みの仕組みがありません。このような場合、悪意のあるアプリが正規のアプリケーションになりすまして認可レスポンス (トークンを含む) を受け取ってしまうおそれがあり、しかもユーザーはそれに気づけません。特に、以前の正規のセッションがあることでシングルサインオン (SSO) が有効になっている場合は、追加のユーザー操作が不要なため、このリスクはさらに高まります。こうしたケースでは、PKCE は実質的にあまり役に立ちません。悪意のあるアプリケーションでも、ユーザー操作なしでログインフローを開始し、コールバックを受け取るのを待ててしまうからです。

ローカルマシン上で動作するアプリケーション (例: デスクトップアプリ、CLI) も、コールバックにループバックインターフェース (例: [http://127.0.0.1:51089/callback](http://127.0.0.1:51089/callback) または [http://localhost:61024/callback](http://localhost:61024/callback)) を使用する場合、同様のリスクがあります。この場合、同じマシン上の別のアプリケーションが同じポートで待ち受けて、レスポンスを傍受できる可能性があります。

カスタム URI スキームとループバック URI は、いずれのケースでも認可サーバーが受信側のアプリケーションを検証できないため、総称して Non-Verifiable Callback URI と呼びます。

<div id="recommended-mitigations-for-mobile-applications">
  ## モバイルアプリケーション向けの推奨対策
</div>

<div id="claimed-https-uris-universal-links-app-links">
  ### 検証済み HTTPS URI (Universal Links / App Links)
</div>

最新のモバイル OS は **検証済み HTTPS URI** をサポートしており、これを使うと、自分で管理しているウェブサイトのドメインをモバイルアプリに関連付けることができます。検証済み HTTPS URI は、次の名称で知られています。

* iOS では Universal Links
* Android では App Links

検証済み HTTPS URI を使用すると、関連付けられた callback URL を処理できるのは対象のアプリケーションのみとなり、機密性の高い認証データへの不正アクセスを防ぐことができます。

<Note>
  Auth0 は、すべてのネイティブアプリケーションで、リダイレクト URI として検証済み HTTPS URI を使用することを **強く推奨** しています。

  * iOS: [Support Universal Links](https://developer.apple.com/documentation/xcode/allowing-apps-and-websites-to-link-to-your-content/#Support-universal-links) を確認してください。
  * Android: [Android App Links](https://developer.android.com/training/app-links) を確認してください。
</Note>

<div id="recommended-mitigations-for-all-application">
  ## すべてのアプリケーションに推奨される緩和策
</div>

次の場合、Auth0 は認証トランザクションの結果を受け取るアプリケーションが正当なものかどうかを検証できません。

* 古いモバイル OS バージョンとの互換性を維持する必要があり、アプリケーションが検証済み HTTPS URI をサポートできない
* アプリケーションがデスクトップアプリケーションまたは CLI アプリケーションである

[OAuth2 for Native Apps](https://datatracker.ietf.org/doc/html/rfc8252#section-8.6) 仕様で定義されているとおり、Auth0 にはユーザーに確認プロンプトを表示する仕組みがあります。ユーザーは、認証結果を受け取るアプリケーションが、自分がアクセスしようとしていたものであることを確認します。検証できないコールバック URI が使用されている場合、ユーザーは認証トランザクションごとにアプリケーションの確認を求められます。

確認画面は、次の場合に表示されます。

1. リクエストに含まれる `redirect_uri` が、検証できない URI (つまり、カスタム URI スキームまたはループバック URI) を使用している。
2. 現在のログイントランザクションで、ユーザーにまだ他の画面が表示されていない (たとえば、サードパーティアプリケーションで[同意画面](/docs/ja-jp/get-started/applications/third-party-applications/user-consent-and-third-party-applications)が表示される場合や、MFA が必要な場合) 。

このような場合、エンドユーザーには確認プロンプトが表示されます。

<Frame>
  <img src="https://mintcdn.com/docs-dev-feat-init-gt-translations/2eg7X7TgyYFJUdNP/docs/images/cdy7uua7fh8z/consent-pompt-uris.png?fit=max&auto=format&n=2eg7X7TgyYFJUdNP&q=85&s=0c709458c859e7b127cd30a095486dc1" alt="アプリのなりすまし対策 - 確認プロンプト" width="298" height="408" data-path="docs/images/cdy7uua7fh8z/consent-pompt-uris.png" />
</Frame>

確認プロンプトは、従来の OIDC 非準拠フローでは表示されません。テナントとアプリケーションの保護を強化する方法については、[OIDC 準拠の認証を採用する](/docs/ja-jp/authenticate/login/oidc-conformant-authentication)を参照してください。

<div id="prompt-customization">
  #### プロンプトのカスタマイズ
</div>

確認プロンプトでは、サードパーティアプリケーション向けの既存の同意画面に対して定義した、カスタムのブランディングと設定が使用されます。詳しくは、[Customize Universal Login Page Templates](/docs/ja-jp/customize/login-pages/universal-login/customize-templates) の Prompts セクションを参照してください。

<Warning>
  本番環境では、この保護を無効にしないことを Auth0 は**強く推奨**しています。デバイス上の悪意あるアプリケーションが、ユーザーの操作や何かが起きたことを示す表示が一切ないまま、`id_tokens` や `access_tokens` を要求できてしまう可能性があります。
</Warning>

確認プロンプトは、テナント全体の設定として、またはアプリケーションレベルで設定できます。アプリケーションレベルの設定は、テナント全体の設定より優先されます。

**アプリケーションレベル**

1. [Auth0 Dashboard > アプリケーション > Application Settings > Advanced > OAuth に移動します](https://manage.auth0.com/#/applications/settings)。
2. **Non-Verifiable Callback URI End-User Confirmation** 設定までスクロールします。
3. プロンプトを有効にするにはトグルをオンにし、無効にするにはトグルをオフにします。

<Frame>
  <img src="https://mintcdn.com/docs-dev-feat-init-gt-translations/2eg7X7TgyYFJUdNP/docs/images/cdy7uua7fh8z/custom-uri-override.png?fit=max&auto=format&n=2eg7X7TgyYFJUdNP&q=85&s=c3a011bb06a2167d2b35a537e5b9c3c2" alt="Auth0 Dashboard>Settings>Advanced" data-og-width="602" width="602" data-og-height="227" height="227" data-path="docs/images/cdy7uua7fh8z/custom-uri-override.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/docs-dev-feat-init-gt-translations/2eg7X7TgyYFJUdNP/docs/images/cdy7uua7fh8z/custom-uri-override.png?w=280&fit=max&auto=format&n=2eg7X7TgyYFJUdNP&q=85&s=dc30141c041a72de3a7feede538f2b6f 280w, https://mintcdn.com/docs-dev-feat-init-gt-translations/2eg7X7TgyYFJUdNP/docs/images/cdy7uua7fh8z/custom-uri-override.png?w=560&fit=max&auto=format&n=2eg7X7TgyYFJUdNP&q=85&s=5c8923d0bf7ce75f17261a07acb6b1ce 560w, https://mintcdn.com/docs-dev-feat-init-gt-translations/2eg7X7TgyYFJUdNP/docs/images/cdy7uua7fh8z/custom-uri-override.png?w=840&fit=max&auto=format&n=2eg7X7TgyYFJUdNP&q=85&s=8cde0ec4ce99cff371a8f5fa3ff04b6d 840w, https://mintcdn.com/docs-dev-feat-init-gt-translations/2eg7X7TgyYFJUdNP/docs/images/cdy7uua7fh8z/custom-uri-override.png?w=1100&fit=max&auto=format&n=2eg7X7TgyYFJUdNP&q=85&s=0b5c767edd8203b6e3924c4c63acb819 1100w, https://mintcdn.com/docs-dev-feat-init-gt-translations/2eg7X7TgyYFJUdNP/docs/images/cdy7uua7fh8z/custom-uri-override.png?w=1650&fit=max&auto=format&n=2eg7X7TgyYFJUdNP&q=85&s=bfecd655bcdcea8af9e19f9d5d545964 1650w, https://mintcdn.com/docs-dev-feat-init-gt-translations/2eg7X7TgyYFJUdNP/docs/images/cdy7uua7fh8z/custom-uri-override.png?w=2500&fit=max&auto=format&n=2eg7X7TgyYFJUdNP&q=85&s=07729f041eedb72bc22657e1ec34fe61 2500w" />
</Frame>

**グローバル**

1. [Auth0 Dashboard > Settings > Advanced に移動します](https://manage.auth0.com/#/tenant/advanced)。
2. **Non-Verifiable Callback URI End-User Confirmation** 設定を探します。
3. プロンプトを有効にするにはトグルをオンにします。

<Frame>
  <img src="https://mintcdn.com/docs-dev-feat-init-gt-translations/2eg7X7TgyYFJUdNP/docs/images/cdy7uua7fh8z/enable-non-verifiable-callback.png?fit=max&auto=format&n=2eg7X7TgyYFJUdNP&q=85&s=4d0e3aaac5f866e04d639c21ebdcfb00" alt="Auth0 Dashboard>Tenant Settings>Advanced>Skip Custom URI toggle" data-og-width="500" width="500" data-og-height="241" height="241" data-path="docs/images/cdy7uua7fh8z/enable-non-verifiable-callback.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/docs-dev-feat-init-gt-translations/2eg7X7TgyYFJUdNP/docs/images/cdy7uua7fh8z/enable-non-verifiable-callback.png?w=280&fit=max&auto=format&n=2eg7X7TgyYFJUdNP&q=85&s=e8312bcad5cdaf7e6129615ab31b4d8e 280w, https://mintcdn.com/docs-dev-feat-init-gt-translations/2eg7X7TgyYFJUdNP/docs/images/cdy7uua7fh8z/enable-non-verifiable-callback.png?w=560&fit=max&auto=format&n=2eg7X7TgyYFJUdNP&q=85&s=efaef41abd201499786516bdbb20d9b2 560w, https://mintcdn.com/docs-dev-feat-init-gt-translations/2eg7X7TgyYFJUdNP/docs/images/cdy7uua7fh8z/enable-non-verifiable-callback.png?w=840&fit=max&auto=format&n=2eg7X7TgyYFJUdNP&q=85&s=4e647af5bf769d7815c4f38131aae3cc 840w, https://mintcdn.com/docs-dev-feat-init-gt-translations/2eg7X7TgyYFJUdNP/docs/images/cdy7uua7fh8z/enable-non-verifiable-callback.png?w=1100&fit=max&auto=format&n=2eg7X7TgyYFJUdNP&q=85&s=944d07c6e9343d2146de9554008a29f4 1100w, https://mintcdn.com/docs-dev-feat-init-gt-translations/2eg7X7TgyYFJUdNP/docs/images/cdy7uua7fh8z/enable-non-verifiable-callback.png?w=1650&fit=max&auto=format&n=2eg7X7TgyYFJUdNP&q=85&s=1ef70429ad6ff816c13f9401da020439 1650w, https://mintcdn.com/docs-dev-feat-init-gt-translations/2eg7X7TgyYFJUdNP/docs/images/cdy7uua7fh8z/enable-non-verifiable-callback.png?w=2500&fit=max&auto=format&n=2eg7X7TgyYFJUdNP&q=85&s=8f18df7c654b363470113508a7f29325 2500w" />
</Frame>
