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

> Auth0.Swift、Auth0.Android、Lock.Swift、Lock.Android を使用するネイティブアプリケーションに、ボット対策と検出を追加する方法を説明します。

# ネイティブアプリケーションにボット検出を追加

使用している SDK と認証フローによっては、ほとんど、あるいはまったく追加設定なしで、ネイティブアプリケーションに [ボット検出](/docs/ja-jp/secure/attack-protection/bot-detection) を追加できます。

<div id="auth0swift-and-auth0android">
  ## Auth0.swift と Auth0.Android
</div>

<Tooltip tip="Universal Login: ユーザーのアイデンティティを確認するために、アプリケーションは Auth0 の認可サーバーでホストされる Universal Login にリダイレクトされます。" cta="用語集を見る" href="/docs/ja-jp/glossary?term=Universal+Login">Universal Login</Tooltip> を使用している場合、<Tooltip tip="Universal Login: ユーザーのアイデンティティを確認するために、アプリケーションは Auth0 の認可サーバーでホストされる Universal Login にリダイレクトされます。" cta="用語集を見る" href="/docs/ja-jp/glossary?term=Bot+Detection">ボット検出</Tooltip> は以下の SDK バージョンで自動的にサポートされます。

* `Auth0.swift` バージョン 1.28.0+
* `Auth0.Android` バージョン 1.25.0+

Universal Login を使用していない場合でも、ボット検出はサポートされていますが、それに応じてアプリケーションを設定する必要があります。

* アプリケーションでは、`requires_verification` 例外 (高リスクのログイン試行が検出されたときにスローされます) を処理し、その後、CAPTCHA 検証ステップをレンダリングするために WebAuth フローをトリガーする必要があります。
* WebAuth フローをトリガーするときは、ユーザーが再度ユーザー名を入力しなくて済むように、`login_hint` パラメータを渡すことができます。

<div id="auth0swift-example">
  ### Auth0.swift の例
</div>

アプリケーションが [Authentication API](https://auth0.com/docs/api/authentication) を使用してデータベース接続でのログイン/サインアップを行う場合は、`isVerificationRequired` エラーを処理する必要があります。このエラーは、リクエストが不審と判定され、ユーザーを認証するために追加の確認ステップが必要であることを示します。

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  この確認ステップはWebベースのため、完了するには [Universal Login](/docs/ja-jp/authenticate/login/auth0-universal-login) を使用する必要があります。
</Callout>

```swift lines expandable theme={null}
Auth0
    .authentication()
    .login(usernameOrEmail: email, 
           password: password, 
           realmOrConnection: connection, 
           scope: scope)
    .start { result in
        switch result {
        case .success(let credentials): // ...
        case .failure(let error) where error.isVerificationRequired:
            DispatchQueue.main.async {
                Auth0
                    .webAuth()
                    .connection(connection)
                    .scope(scope)
                    .useEphemeralSession()
                    // ☝🏼 そうしないとセッションCookieが残ります
                    .parameters(["login_hint": email])
                    // ☝🏼 ユーザーが再入力しなくて済むようにするため
                    .start { result in
                        // ...
                    }
            }
        case .failure(let error): // ...
        }
    }
```

サインアップの場合、ユーザーが直接サインアップページに移動するように、[追加のパラメータ](/docs/ja-jp/authenticate/login/auth0-universal-login)を追加できます。

`.parameters(["login_hint": email, "screen_hint": "signup"])`

Universal Login の設定方法について詳しくは、[Auth0.swift Getting Started](https://github.com/auth0/Auth0.swift#getting-started)をお読みください。

<div id="auth0android-example">
  ### Auth0.Android の例
</div>

アプリケーションが Authentication API を使用してデータベースのログイン/サインアップを行う場合は、`AuthenticationException#isVerificationRequired()` エラーを処理する必要があります。このエラーは、リクエストが不審であると判定され、ユーザーをログインさせるには追加の認証ステップが必要であることを示します。

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  この認証ステップは Web ベースのため、完了するには [Universal Login](/docs/ja-jp/authenticate/login/auth0-universal-login) を使用する必要があります。
</Callout>

```swift lines expandable theme={null}
final String email = "username@domain.com";
final String password = "a secret password";
final String realm = "my-database-connection";

AuthenticationAPIClient authentication = new AuthenticationAPIClient(account);
authentication.login(email, password, realm)
        .start(new BaseCallback<Credentials, AuthenticationException>() {

            @Override
            public void onFailure(AuthenticationException error) {
                if (error.isVerificationRequired()){
                    Map<String, Object> params = new HashMap<>();
                    params.put("login_hint", email); // ユーザーが再度入力しなくて済むように
                    WebAuthProvider.login(account)
                            .withConnection(realm)
                            .withParameters(params)
                            .start(LoginActivity.this, new AuthCallback() {
                                // You might already have an AuthCallback instance defined

                                @Override
                                public void onFailure(@NonNull Dialog dialog) {
                                    // Error dialog available
                                }

                                @Override
                                public void onFailure(AuthenticationException exception) {
                                    // Error
                                }

                                @Override
                                public void onSuccess(@NonNull Credentials credentials) {
                                    // Handle WebAuth success
                                }
                            });
                }
            }

            @Override
            public void onSuccess(Credentials payload) {
                // Handle API success
            }
        });
```

サインアップの場合は、ユーザーが直接サインアップページに移動するように、[追加のパラメータ](/docs/ja-jp/authenticate/login/auth0-universal-login)を指定できます。

`params.put("screen_hint", "signup");`

Universal Login の設定方法について詳しくは、[Auth0.Android Authentication with Universal Login SDK documentation](https://github.com/auth0/Auth0.Android#authentication-with-universal-login)をご覧ください。

<div id="lockswift-and-lockandroid">
  ## Lock.Swift と Lock.Android
</div>

Universal Login を使用している場合、ボット検出は次の SDK バージョンで自動的にサポートされます。

* `Lock.Swift` バージョン 2.19.0+
* `Lock.Android` バージョン 2.22.0+

Universal Login を使用していない場合でも、ボット検出はサポートされますが、それに合わせてアプリケーションを設定する必要があります。

* アプリケーションでは、`requires_verification` 例外 (高リスクのログイン試行が検出されたときにスローされる) を処理し、その後、WebAuth フローをトリガーして CAPTCHA 検証ステップをレンダリングする必要があります。
* WebAuth フローをトリガーするときに `login_hint` パラメータを渡すと、ユーザーはユーザー名をもう一度入力せずに済みます。

<div id="authentication-api">
  ## Authentication API
</div>

Authentication API を直接使用している場合、ボット検出はサポート対象ですが、そのためにはアプリケーションを適切に設定する必要があります。

* アプリケーションは `requires_verification` エラー (高リスクのログイン試行が検出された場合に Authentication API から返されます) を処理し、その後、CAPTCHA 検証ステップをレンダリングするために WebAuth フローをトリガーする必要があります。

<div id="learn-more">
  ## さらに詳しく
</div>

* [カスタムログインページにボット検出を追加する](/docs/ja-jp/secure/attack-protection/bot-detection/bot-detection-custom-login-pages)
