> For the complete documentation index, see [llms.txt](https://docs.payments.thalescloud.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.payments.thalescloud.io/nfc-wallet/es/backend-de-nfc-wallet/registro-de-tarjeta/generar-token-de-autenticacion-antiguo.md).

# Generar token de autenticación (antiguo)

### Descripción general

Para admitir la inscripción en el flujo verde, el backend del emisor debe generar un token de autenticación.

El token demuestra que el emisor autenticó previamente al usuario final y aprobó la solicitud de tokenización.

Firma el token de autenticación con la clave privada del backend del emisor.

El backend de NFC Wallet valida el token con la clave pública correspondiente proporcionada durante la incorporación.

{% hint style="warning" %}
Genera el token de autenticación en el backend del emisor. Luego pásalo a la aplicación del emisor.
{% endhint %}

### Requisitos del token de autenticación

El token de autenticación es un JWT ([RFC 7519](https://datatracker.ietf.org/doc/html/rfc7519)).

{% hint style="info" %}
JWT es un formato estándar para transmitir afirmaciones firmadas entre sistemas.
{% endhint %}

#### Algoritmos compatibles

El backend de NFC Wallet admite estos algoritmos de firma:

* `RS256`
* `PS256`
* `PS512`

#### Formato JWT

Un JWT contiene tres partes codificadas en Base64URL separadas por puntos (`.`):

* Encabezado
* Carga útil
* Firma

El formato compacto es:

`<encabezado>.<carga útil>.<firma>`

#### Encabezado

El encabezado define el tipo de token y el algoritmo de firma.

`kid` es obligatorio. El backend de NFC Wallet lo usa para seleccionar la clave pública correcta.

Ejemplo de encabezado:

{% code title="Encabezado JWT" expandable="true" %}

```json
{
  "typ": "JWT",
  "alg": "RS256",
  "kid": "12345abcde"
}
```

{% endcode %}

Codifica el encabezado en Base64URL como una sola línea antes de generar la firma.

#### Carga útil

La carga útil admite estas afirmaciones:

| Campo | Requisito   | Descripción                                                                                                                                         |
| ----- | ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------- |
| `iss` | Obligatorio | Identificador del emisor. Usa el `issuerId` asignado durante la incorporación.                                                                      |
| `sub` | Condicional | Proporciona esta afirmación solo si `nonce` está presente en los datos cifrados de la tarjeta. Establece el valor en el hash SHA-256 de la `nonce`. |
| `iat` | Obligatorio | Hora de emisión del token, con formato según lo definido en [RFC 7519](https://datatracker.ietf.org/doc/html/rfc7519).                              |
| `exp` | Obligatorio | Hora de expiración del token, con formato según lo definido en [RFC 7519](https://datatracker.ietf.org/doc/html/rfc7519).                           |

Ejemplo de carga útil:

{% code title="Carga útil JWT" expandable="true" %}

```json
{
  "iat": 1456815010,
  "exp": 1456851010,
  "iss": "acmeBank",
  "sub": "b776ce1e1b00be3f03c7fff59d872c32cfd65cc4377766f47af84f48ea8925f2"
}
```

{% endcode %}

En este ejemplo, `sub` contiene el hash SHA-256 de la `nonce` valor `abdda9cfbe2fdce335290773ba6f56a9c5ebe64910`.

#### Firma

Calcula la firma sobre el encabezado y la carga útil codificados en Base64URL con la clave privada del backend del emisor.

El backend de NFC Wallet valida la firma con la clave pública proporcionada durante la incorporación.

El JWT final es la concatenación del encabezado codificado, la carga útil y la firma, separados por puntos.

#### Generar el JWT

Puedes usar cualquier biblioteca JWT que admita firmas RSA y encabezados personalizados.

Este ejemplo usa la `jose4j` biblioteca Java:

{% code title="GenerateJwt.java" %}

```java
private static String generateJwt() throws Exception {
    JwtClaims claims = new JwtClaims();
    claims.setIssuer(issuerId);
    claims.setExpirationTimeMinutesInTheFuture(5);
    claims.setIssuedAtToNow();

    if (subject != null) {
        claims.setSubject(subject);
    }

    JsonWebSignature jws = new JsonWebSignature();
    jws.setPayload(claims.toJson());
    jws.setKey(privateKey);
    jws.setHeader("typ", "JWT");
    jws.setHeader("kid", keyId);
    jws.setAlgorithmHeaderValue(AlgorithmIdentifiers.RSA_USING_SHA256);

    return jws.getCompactSerialization();
}
```

{% endcode %}

{% hint style="info" %}
Consulta [Bibliotecas JWT por lenguaje](https://jwt.io/#libraries-io) para ver las implementaciones compatibles.
{% endhint %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.payments.thalescloud.io/nfc-wallet/es/backend-de-nfc-wallet/registro-de-tarjeta/generar-token-de-autenticacion-antiguo.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
