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

# Solicite un token de acceso

> Firme una aserción de cliente ES256 e intercámbiela por un token de acceso de portador de corta duración utilizando el flujo de aserción de cliente de portador JWT de OAuth 2.0.

La autenticación utiliza el flujo de **aserción de cliente JWT bearer** de OAuth 2.0 ([RFC 7523](https://datatracker.ietf.org/doc/html/rfc7523)) con una concesión `client_credentials`. En ningún caso se transmite ningún secreto de cliente.

Necesitará:

* Su **`OAuthClientId`** y su **`KID`**, incluidos en su paquete de incorporación.
* La **clave privada** (`es256-private.pem`) que coincide con la clave pública que ha registrado. Consulte [Configuración del par de claves](/api-reference/authentication/key-pair-setup).

## Paso 1: Generar la aserción del cliente

Genere un JWT y fírmelo con su clave **privada** ES256.

**Encabezado**

```json theme={null}
{ "alg": "ES256", "typ": "JWT", "kid": "<KID>" }
```

**Carga útil**

```json theme={null}
{
  "iss": "<OAuthClientId>",
  "sub": "<OAuthClientId>",
  "aud": "cb-gateway-m2m-blue",
  "jti": "<random UUID>",
  "iat": 1790812800,
  "exp": 1790812920
}
```

| Reclamación | Valor |
| - | - |
| `iss`, `sub` | Ambos **deben** coincidir con su `OAuthClientId`. |
| `aud` | **Debe** ser exactamente `cb-gateway-m2m-blue`. No se trata de la URL de la pasarela. |
| `jti` | Un nuevo UUID aleatorio para cada aserción. Las aserciones son de un solo uso. |
| `iat` | La hora actual, en segundos Unix. |
| `exp` | `iat` más 120 segundos. Las aserciones tienen una vigencia limitada por diseño. |

## Paso 2: Canjea la aserción por un token de acceso

`POST` Envíe la aserción al punto final del token como `application/x-www-form-urlencoded`. Consulte el documento «[Referencia de punto final](/api-reference/create-jwt-token)» para ver el esquema completo.

```http theme={null}
POST /api/security/token
Content-Type: application/x-www-form-urlencoded

grant_type=client_credentials
&client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer
&client_assertion=<signed JWT>
&OAuthClientId=<OAuthClientId>
```

La respuesta es un JSON que contiene un `accessToken` campo, válido durante 30 minutos (`expiresIn: 1800`). No se emite ningún token de actualización a los clientes M2M, por lo que `refreshToken` siempre es `null`.

## Paso 3: Llamada a la API

Envíe el token como token de portador en cada solicitud:

| Encabezado | Valor |
| - | - |
| `Authorization` | `Bearer <accessToken>` |
| `Content-Type` | `application/json` |
| `Accept` | `application/json` |

Solicite un nuevo token cuando caduque, en lugar de almacenarlo en caché a largo plazo.

## Ejemplo completo

Consulte [Ejemplos de scripts](/api-reference/authentication/sample-scripts) para obtener versiones ejecutables en TypeScript y Python del flujo completo. Su paquete de incorporación incluye los mismos scripts con sus datos ya rellenados.

## Resolución de problemas

### Código de estado 401 del punto final del token

El punto final del token devuelve el mismo valor vacío `401` para cada afirmación rechazada. Compruebe cada uno de estos puntos:

* El encabezado `alg` es `ES256` y `kid` es la `KID` de una clave que está registrada y no ha sido revocada.
* `iss` es exactamente la suya `OAuthClientId`. Buscamos su clave pública mediante `iss` y `kid`.
* `aud` es exactamente `cb-gateway-m2m-blue`.
* `exp` está presente y es futuro. Admitimos un desfase horario de 30 segundos, por lo que le recomendamos que compruebe el reloj del equipo si los fallos persisten.
* `jti` está presente y es nueva. Una `jti` no puede reutilizarse en un plazo de 10 minutos.
* La aserción se firma con la clave privada que coincide con la clave pública que ha registrado.

### 401 «Acceso no autorizado» en rutas de la API

El token de acceso ha caducado (los tokens tienen una validez de 30 minutos) o la ruta no está incluida en sus derechos de acceso. Solicite un nuevo token y póngase en contacto con su administrador de Credit Benchmark si el error persiste.

### Falta una clave, ha sido revocada o se ha rotado

Póngase en contacto con su administrador de Credit Benchmark.

## Notas de seguridad

* **Nunca** comparta su clave privada con nadie, ni siquiera con Credit Benchmark. Solo la clave pública debe salir de sus sistemas.
* Genere una nueva aserción de cliente para cada solicitud de token.
* Si en algún momento se ve comprometida una clave privada, solicítenos que la revoque de inmediato y siga el procedimiento de [rotación de claves](/api-reference/authentication/key-pair-setup#key-rotation).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.