Aller au contenu
ecdsa.com
jose (JavaScript)JWKS et découverte des clés

Message d’erreur

Expected 200 OK from the JSON Web Key Set HTTP response

jose (JavaScript) — JOSEError from createRemoteJWKSet, code ERR_JOSE_GENERIC

Ce que cela signifie

`createRemoteJWKSet` a demandé l’URL du jeu de clés et a reçu un statut HTTP autre que 200. jose récupère le JWKS avec les redirections désactivées (`redirect: "manual"`) : un 301/302 compte donc comme un échec, au même titre qu’un 404 ou un 401. Aucune clé n’a été chargée et aucune signature de jeton n’a été vérifiée ; l’URL que vous avez configurée ne répond pas avec un jeu de clés.

Pourquoi cela se produit

Comment corriger l’erreur

  1. 1.

    Lire jwks_uri dans le document de découverte

    Les fournisseurs OpenID Connect publient l’URL exacte du jeu de clés sous `jwks_uri` dans `/.well-known/openid-configuration`. Résolvez-la une seule fois au démarrage et passez cette URL à `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.

    Vérifier le code de statut sans suivre les redirections

    curl sans `-L` se comporte comme jose. Un 200 avec `{"keys":[...]}` est ce qu’il vous faut ; un 30x vous indique l’URL à configurer à la place.

    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

Erreurs associées

Parcourir toute la base de données des erreurs de signature