Pular para o conteúdo
ecdsa.com
jose (JavaScript)JWKS e descoberta de chaves

Mensagem de erro

Expected 200 OK from the JSON Web Key Set HTTP response

jose (JavaScript) — JOSEError from createRemoteJWKSet, code ERR_JOSE_GENERIC

O que significa

O `createRemoteJWKSet` requisitou a URL do conjunto de chaves e recebeu um status HTTP diferente de 200. O jose busca o JWKS com redirecionamentos desativados (`redirect: "manual"`), então um 301/302 conta como falha, assim como um 404 ou 401. Nenhuma chave foi carregada e nenhuma assinatura de token foi verificada; a URL que você configurou não responde com um conjunto de chaves.

Por que acontece

Como corrigir

  1. 1.

    Ler o jwks_uri do documento de descoberta

    Provedores OpenID Connect publicam a URL exata do conjunto de chaves como `jwks_uri` em `/.well-known/openid-configuration`. Obtenha essa URL uma vez na inicialização e passe-a para o `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.

    Verificar o código de status sem seguir redirecionamentos

    O curl sem `-L` se comporta como o jose. Um 200 com `{"keys":[...]}` é o que você precisa; um 30x informa a URL que deve ser configurada no 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

Erros relacionados

Ver toda a base de erros de assinatura