Zum Inhalt springen
ecdsa.com
Envoy / IstioJWKS und Schlüsselermittlung

Fehlermeldung

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

Auch ausgegeben als

  • Jwt verification fails
  • Jwks remote fetch is failed

Body der 401-Antwort; der Header `WWW-Authenticate` enthält `error="invalid_token"`. Ein Provider, dessen `remote_jwks` sich nicht abrufen lässt, antwortet mit „Jwks remote fetch is failed“.

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

Was der Fehler bedeutet

Der Filter `jwt_authn` von Envoy (den auch `RequestAuthentication` in Istio nutzt) hat im JWKS des Providers nach einem Schlüssel mit dem `kid` des Tokens und einem zum `alg` passenden Typ gesucht und keinen gefunden. Deshalb hat er mit 401 und diesem Text als Body geantwortet. Die Signatur wurde nie geprüft. Existiert ein passender Schlüssel, schlägt aber die Signaturprüfung fehl, lautet der Body stattdessen „Jwt verification fails“.

Warum der Fehler auftritt

So behebst du den Fehler

  1. 1.

    JWKS beim Aussteller abrufen

    Verwende `remote_jwks` mit einer sinnvollen `cache_duration` und asynchronem Abruf, damit die Schlüssel vorliegen, bevor Tokens sie verwenden.

    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.

    In Istio auf jwksUri verweisen

    Istiod ruft die Schlüssel ab und verteilt sie; ein eingebetteter Wert für `jwks` muss bei jeder Rotation von Hand aktualisiert werden.

    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

Verwandte Fehler

Gesamte Signaturfehler-Datenbank durchsuchen