> 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.md).

# Generar token de autenticación

## Resumen

El backend de la billetera digital debe construir un token de autenticación en los siguientes casos:

* Para admitir el registro del flujo verde.
* Para proporcionar datos adicionales de la billetera (evaluación de riesgo del emisor).

El backend de la billetera digital firma el token de autenticación con su clave privada.

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

{% hint style="warning" %}
Construya el token de autenticación en el backend de la billetera digital. Luego páselo a la aplicación de la billetera digital.
{% endhint %}

### Registro del flujo verde

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

### Datos adicionales de la billetera

El token de autenticación permite que la billetera digital proporcione datos adicionales de forma segura. Ayuda a garantizar que ningún intermediario altere los datos adicionales.

Ver [Proporcionar datos adicionales de la billetera](/nfc-wallet/es/backend-de-nfc-wallet/registro-de-tarjeta/generar-token-de-autenticacion/proporcionar-datos-adicionales-de-la-billetera.md).

### 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 reclamaciones 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:

`<header>.<payload>.<signature>`

#### 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 %}

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

#### Carga útil

La carga útil admite estas reclamaciones:

<table><thead><tr><th width="133.22216796875">Campo</th><th width="146.77777099609375">Obligatorio</th><th>Descripción</th></tr></thead><tbody><tr><td><code>iss</code></td><td>Obligatorio</td><td>Identificador del emisor. Use el <code>issuerId</code> asignado durante la incorporación.</td></tr><tr><td><code>sub</code></td><td>Condicional</td><td>Obligatorio solo si <code>nonce</code> está presente en los datos de la tarjeta cifrada. Establezca el valor en el hash SHA-256 del <code>nonce</code>.</td></tr><tr><td><code>iat</code></td><td>Obligatorio</td><td>Tiempo de emisión del token, formateado según lo definido en <a href="https://datatracker.ietf.org/doc/html/rfc7519">RFC 7519</a>.</td></tr><tr><td><code>exp</code></td><td>Obligatorio</td><td>Tiempo de expiración del token, formateado según lo definido en <a href="https://datatracker.ietf.org/doc/html/rfc7519">RFC 7519</a>.</td></tr><tr><td><code>wallet</code></td><td>Opcional</td><td>Datos adicionales de la billetera en formato de carga útil JSON.<br>Ver <a href="/spaces/DTMKRsJAtl6BU6zyIjqP/pages/dfabb6d1c55207f3a60a2fdd672b45c999ee0bbe">Proporcionar datos adicionales de la billetera</a>.</td></tr></tbody></table>

Ejemplo de carga útil:

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

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

{% endcode %}

> En el ejemplo anterior, `sub` es `b776ce1e1b00be3f03c7fff59d872c32cfd65cc4377766f47af84f48ea8925f2`. Es el hash SHA-256 del `nonce` valor `abdda9cfbe2fdce335290773ba6f56a9c5ebe64910`.

#### Firma

Calcule 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, la carga útil y la firma codificados, separados por puntos.

#### Genere el JWT

Puede 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" %}
Ver [Bibliotecas JWT por idioma](https://jwt.io/#libraries-io) para 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.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.
