Saltar al contenido
ecdsa.com
Envoy / IstioJWKS y descubrimiento de claves

Mensaje de error

Jwks doesn't have key to match kid or alg from Jwt

También se muestra como

  • Jwt verification fails
  • Jwks remote fetch is failed

Cuerpo de la respuesta 401; el encabezado `WWW-Authenticate` lleva `error="invalid_token"`. Un proveedor cuyo `remote_jwks` no se puede obtener responde «Jwks remote fetch is failed».

Envoy / Istio — envoy.filters.http.jwt_authn (401 response body; Istio RequestAuthentication)

Qué significa

El filtro `jwt_authn` de Envoy (en el que también se basa `RequestAuthentication` de Istio) buscó en el JWKS del proveedor una clave con el `kid` del token y un tipo compatible con su `alg`, no encontró ninguna y respondió 401 con este texto como cuerpo. La firma no llegó a comprobarse. Si existe una clave que coincide pero la firma no se verifica, el cuerpo es «Jwt verification fails».

Por qué ocurre

Cómo solucionarlo

  1. 1.

    Obtener el JWKS del emisor

    Usa `remote_jwks` con un `cache_duration` razonable y la descarga asíncrona activada, para que las claves ya estén disponibles cuando los tokens las usen.

    yaml
    providers:
      issuer_example:
        issuer: https://issuer.example.com
        audiences: ["api://orders"]
        remote_jwks:
          http_uri:
            uri: https://issuer.example.com/.well-known/jwks.json
            cluster: issuer_jwks          # a cluster with TLS to the issuer
            timeout: 5s
          cache_duration: 600s
          async_fetch: { fast_listener: false }   # prefetch, and refetch in the background
  2. 2.

    En Istio, apuntar a jwksUri

    Istiod obtiene y distribuye las claves; un valor `jwks` incrustado debe actualizarse a mano en cada rotación.

    yaml
    apiVersion: security.istio.io/v1
    kind: RequestAuthentication
    metadata:
      name: orders-jwt
    spec:
      selector:
        matchLabels: { app: orders }
      jwtRules:
      - issuer: https://issuer.example.com
        jwksUri: https://issuer.example.com/.well-known/jwks.json   # not an inline "jwks:" copy

Errores relacionados

Explorar toda la base de datos de errores de firma