Saltar al contenido
ecdsa.com
jose (JavaScript)JWKS y descubrimiento de claves

Mensaje de error

Expected 200 OK from the JSON Web Key Set HTTP response

jose (JavaScript) — JOSEError from createRemoteJWKSet, code ERR_JOSE_GENERIC

Qué significa

`createRemoteJWKSet` solicitó la URL del conjunto de claves y recibió un estado HTTP distinto de 200. jose obtiene el JWKS con las redirecciones desactivadas (`redirect: "manual"`), así que un 301/302 cuenta como fallo igual que un 404 o un 401. No se cargó ninguna clave ni se comprobó la firma de ningún token; la URL configurada no responde con un conjunto de claves.

Por qué ocurre

Cómo solucionarlo

  1. 1.

    Leer jwks_uri del documento de descubrimiento

    Los proveedores de OpenID Connect publican la URL exacta del conjunto de claves como `jwks_uri` en `/.well-known/openid-configuration`. Resuélvela una vez al arrancar y pasa esa URL a `createRemoteJWKSet`.

    js
    import { createRemoteJWKSet } from "jose";
    
    // Resolve jwks_uri from the provider's discovery document instead of guessing it.
    const discovery = await fetch("https://login.example.com/.well-known/openid-configuration").then((r) => r.json());
    const jwks = createRemoteJWKSet(new URL(discovery.jwks_uri));
  2. 2.

    Comprobar el código de estado sin seguir las redirecciones

    curl sin `-L` se comporta como jose. Lo que necesitas es un 200 con `{"keys":[...]}`; un 30x te indica la URL que debes configurar en su lugar.

    bash
    # Status line and redirect target, without following redirects (jose does not follow them either)
    curl -sS -o /dev/null -w '%{http_code} %{redirect_url}\n' https://login.example.com/jwks
    curl -s https://login.example.com/.well-known/openid-configuration | jq -r .jwks_uri

Errores relacionados

Explorar toda la base de datos de errores de firma