invalid_signature
El JWT firmado no verifica contra la clave pública registrada, o alguno de sus claims no coincide con la petición.
| HTTP | code | ¿Reintentable? |
|---|---|---|
| 401 | invalid_signature | no |
Cuándo ocurre
Firma incorrecta, sub/uri/bodyHash que no coinciden, exp - iat > 60s, o falta el nonce.
Valores de reason
La respuesta trae un campo reason que nombra la primera comprobación que falló. Las comprobaciones corren en el orden de la tabla, así que un bad_body_hash implica que sub y uri ya coincidían. Ramifica sobre reason, no sobre detail.
reason | Significado |
|---|---|
no_signing_key | La llave no tiene ninguna clave de firma activa. Sube la clave pública (SPKI) desde el panel. |
bad_jwt | El JWT no verifica contra ninguna clave de firma activa, o está malformado o vencido. Verificamos contra todas las claves activas, así que esto no es un solapamiento de rotación. |
bad_sub | El claim sub no es idéntico a la cabecera X-API-Key. Ambos son el prefijo de la llave. |
bad_uri_claim | El claim uri no es "MÉTODO /ruta?query" exactamente como se envía, query incluida. |
missing_iat_exp | Falta iat o exp, o alguno no es numérico. |
exp_too_far | exp - iat > 60 segundos. |
bad_body_hash | bodyHash no es el SHA-256 hex de los bytes crudos que enviaste. Serializa el cuerpo una sola vez y envía esos bytes. |
missing_nonce | Falta el claim nonce. Un nonce repetido es distinto: devuelve nonce_reused. |
Cómo resolverlo
Reconstruye el JWT: sub = prefijo de la llave, uri = "MÉTODO /ruta?query" exacto, bodyHash = SHA-256 hex de los bytes crudos del cuerpo, exp ≤ iat + 60. Firma con la clave privada cuyo par público subiste.
Ejemplo
{
"type": "https://docs.skipo.com/errors/invalid_signature",
"title": "Invalid signature",
"status": 401,
"code": "invalid_signature",
"retryable": false,
"detail": "El JWT firmado no verifica contra la clave pública registrada, o alguno de sus claims no coincide con la petición.",
"reason": "bad_sub"
}
Volver al catálogo de errores · Ver el formato de errores.