> ## 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.

# Solicitud de desafío

> Solicite un desafío de MFA (OTP u OOB) para continuar la autenticación en el endpoint de token.

export const ResponseSchema = ({statusCode, type = "{}", children}) => {
  const [open, setOpen] = useState(false);
  return <div className="border border-gray-100 dark:border-gray-800 rounded-lg mb-3 overflow-hidden">
      <div className={`flex items-center gap-2.5 px-4 py-2.5 cursor-pointer select-none ${open ? "bg-gray-50 dark:bg-gray-800" : ""}`} onClick={() => setOpen(!open)}>
        {statusCode && <span className="border border-gray-300 dark:border-gray-600 text-gray-700 dark:text-gray-300 font-mono text-xs px-1.5 py-0.5 rounded">
            {statusCode.startsWith("default") ? "default" : statusCode}
          </span>}
        <span className="text-gray-500 dark:text-gray-400 text-sm font-mono">
          {type}
        </span>
        <span className="text-gray-400 dark:text-gray-500 text-sm italic">
          application/json
        </span>
        <svg className={`ml-auto opacity-50 transition-transform duration-200 ${open ? "rotate-180" : ""}`} width="16" height="16" viewBox="0 0 16 16" fill="none">
          <path d="M4 6l4 4 4-4" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round" strokeLinejoin="round" />
        </svg>
      </div>
      {open && <div className="px-4 pt-1 pb-3 border-t border-gray-100 dark:border-gray-800">
          {children}
        </div>}
    </div>;
};

<div id="endpoint">
  ## Endpoint
</div>

`POST /mfa/challenge`

Los endpoints de la API de autenticación multifactor (MFA) le permiten exigir MFA cuando los usuarios interactúan con [los endpoints de token](#get-token), así como inscribir y administrar los autenticadores de usuario.

Primero, solicite un desafío según los tipos de desafío que admitan la aplicación y el usuario. Si sabe que se admite una contraseña de un solo uso (OTP), puede omitir la solicitud de desafío.

A continuación, verifique la autenticación multifactor mediante el endpoint `/oauth/token` y el tipo de desafío especificado: una contraseña de un solo uso (OTP), un código de recuperación o un desafío fuera de banda (OOB).

Para obtener más información, consulte:

* [Autenticación multifactor y Resource Owner Password](https://auth0.com/docs/secure/multi-factor-authentication/authenticate-using-ropg-flow-with-mfa)
* [API de autenticación multifactor](https://auth0.com/docs/secure/multi-factor-authentication/multi-factor-authentication-developer-resources/mfa-api)
* [Autenticación multifactor en Auth0](https://auth0.com/docs/secure/multi-factor-authentication)

<div id="challenge-request">
  ## Solicitud de desafío
</div>

Solicite un desafío para la autenticación multifactor (MFA) según los tipos de desafío que admite la aplicación y el usuario.

El `challenge_type` indica cómo el usuario recibirá el desafío y demostrará que lo posee. Los tipos de desafío admitidos incluyen:

* `otp`: para contraseña de un solo uso (OTP)
* `oob`: para mensajes SMS/voz o fuera de banda (OOB)

Si el usuario admite OTP y no desea solicitar un factor diferente, puede omitir la solicitud de desafío y [verificar la autenticación multifactor con una contraseña de un solo uso](#verify-with-one-time-password-otp-).

<div id="remarks">
  ### Observaciones
</div>

* Este endpoint no admite la inscripción; el usuario debe estar inscrito con el método preferido antes de solicitar un desafío.
* Auth0 elige el tipo de desafío según los tipos compatibles con la aplicación y aquellos en los que el usuario está inscrito.
* Se devuelve un error `unsupported_challenge_type` si la aplicación no admite ninguno de los tipos de desafío en los que el usuario está inscrito.
* Se devuelve un error `unsupported_challenge_type` si el usuario no está inscrito.
* Si el usuario no está inscrito, recibirá un error `association_required`, lo que indica que debe inscribirse para usar MFA. Lea [Agregar un autenticador](/es/multi-factor-authentication/add-an-authenticator) a continuación para saber cómo proceder.

<div id="learn-more">
  ### Más información
</div>

* [Autenticación con Resource Owner Password Grant y MFA](https://auth0.com/docs/secure/multi-factor-authentication/authenticate-using-ropg-flow-with-mfa)
* [Administrar factores de autenticación mediante la API de MFA](https://auth0.com/docs/secure/multi-factor-authentication/manage-mfa-auth0-apis/manage-authenticator-factors-mfa-api)

<div id="body-parameters">
  ## Parámetros del cuerpo
</div>

<ParamField body="mfa_token" type="string" required>
  El token recibido en el error `mfa_required`.
</ParamField>

<ParamField body="client_id" type="string" required>
  El ID de cliente de su aplicación.
</ParamField>

<ParamField body="client_secret" type="string">
  El secreto del cliente de su aplicación.
</ParamField>

<ParamField body="challenge_type" type="string">
  Una lista de tipos de desafío que acepta su aplicación, separados por espacios en blanco.

  Valores permitidos: `oob`, `otp`
</ParamField>

<ParamField body="client_assertion" type="string">
  Un JWT que contiene una aserción firmada con las credenciales de su aplicación.
</ParamField>

<ParamField body="client_assertion_type" type="string">
  El valor es urn:ietf:params:oauth:client-assertion-type:jwt-bearer.
</ParamField>

<ParamField body="authenticator_id" type="string">
  El ID del autenticador que se va a desafiar.
</ParamField>

<div id="response-schema">
  ## Esquema de respuesta
</div>

<ResponseSchema statusCode="200">
  <ResponseField name="challenge_type" type="string">
    El tipo de desafío que genera este autenticador. Valores posibles: `otp`, `oob`.
  </ResponseField>

  <ResponseField name="oob_code" type="string">
    El código del desafío fuera de banda. Solo está presente cuando `challenge_type` es `oob`.
  </ResponseField>

  <ResponseField name="binding_method" type="string">
    El método utilizado para el Binding. Solo está presente cuando corresponde. Valores posibles: `prompt`.
  </ResponseField>
</ResponseSchema>

<ResponseSchema statusCode="400">
  <ResponseField name="error" type="string">
    Código de error.
  </ResponseField>

  <ResponseField name="error_description" type="string">
    Descripción detallada del error.
  </ResponseField>
</ResponseSchema>

<div id="response-messages">
  ## Mensajes de respuesta
</div>

| Estado | Descripción                                                                                   |
| ------ | --------------------------------------------------------------------------------------------- |
| 200    | Solicitud de desafío completada correctamente                                                 |
| 400    | Solicitud no válida, por ejemplo, un tipo de desafío no compatible o la falta de inscripción. |
