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

# Obtener un token

> Intercambie un código de autorización por tokens mediante el Flujo de código de autorización.

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 /oauth/token`

Para la autenticación basada en tokens, use el endpoint `oauth/token` para obtener un token de acceso con el que su aplicación pueda realizar llamadas autenticadas a una API segura. De forma opcional, también puede obtener un ID Token y un Token de actualización. Los ID Tokens contienen información del usuario en forma de alcances que su aplicación puede extraer para ofrecer una mejor experiencia de usuario. Los Tokens de actualización permiten que su aplicación solicite un nuevo token de acceso cuando el token actual venza, sin interrumpir la experiencia del usuario. Para obtener más información, consulte [ID Tokens](https://auth0.com/docs/secure/tokens/id-tokens) y [Refresh Tokens](https://auth0.com/docs/secure/tokens/refresh-tokens).

Tenga en cuenta que los únicos flujos de OAuth 2.0 que pueden obtener un Token de actualización son:

* [Flujo de código de autorización (código de autorización)](https://auth0.com/docs/get-started/authentication-and-authorization-flow/authorization-code-flow)
* [Flujo de código de autorización con PKCE (Authorization Code with PKCE)](https://auth0.com/docs/get-started/authentication-and-authorization-flow/authorization-code-flow-with-pkce)
* [Flujo de contraseña del propietario del recurso](https://auth0.com/docs/get-started/authentication-and-authorization-flow/resource-owner-password-flow)
* [Flujo de autorización de dispositivo](https://auth0.com/docs/get-started/authentication-and-authorization-flow/device-authorization-flow)
* Intercambio de tokens\*

Este es el flujo que usan las aplicaciones web tradicionales para acceder a una API. Use este endpoint para intercambiar un código de autorización por un token.

<div id="headers">
  ## Encabezados
</div>

<ParamField header="DPoP" type="string">
  Una prueba DPoP para la solicitud. Es opcional y solo se requiere si la aplicación usa Demonstrating Proof-of-Possession.
</ParamField>

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

<ParamField body="grant_type" type="string" required>
  Indica el flujo que usa. Para el código de autorización, use `authorization_code`.
</ParamField>

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

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

<ParamField body="code" type="string" required>
  El código de autorización recibido en la llamada inicial a `/authorize`.
</ParamField>

<ParamField body="redirect_uri" type="string">
  Solo es obligatorio si se configuró en el endpoint [GET /authorize](#authorization-code-grant). El valor de `/authorize` debe coincidir con el que establezca en `/oauth/token`.
</ParamField>

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

<ResponseSchema>
  <ResponseField name="access_token" type="string">
    El token de acceso.
  </ResponseField>

  <ResponseField name="refresh_token" type="string">
    El token de actualización que se usa para obtener nuevos tokens de acceso.
  </ResponseField>

  <ResponseField name="id_token" type="string">
    El ID Token.
  </ResponseField>

  <ResponseField name="token_type" type="string">
    El tipo de token. Por lo general, `Bearer`.
  </ResponseField>

  <ResponseField name="expires_in" type="integer">
    La duración del token de acceso en segundos.
  </ResponseField>
</ResponseSchema>

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

| Estado | Descripción                  |
| ------ | ---------------------------- |
| 200    | Obtención correcta del token |
