Zum Inhalt springen
ecdsa.com
jose (JavaScript)JWT-Bibliotheken

Fehlermeldung

missing required "aud" claim

Auch ausgegeben als

  • missing required "iss" claim
  • missing required "exp" claim
  • missing required "sub" claim
  • missing required "iat" claim

Der Name des Claims hängt davon ab, welcher Claim fehlt (`"aud"`, `"iss"`, `"exp"`, `"sub"`, `"iat"`…). `err.claim` enthält den Namen, und `err.reason` ist `"missing"`.

jose (JavaScript) — JWTClaimValidationFailed, code ERR_JWT_CLAIM_VALIDATION_FAILED, reason "missing"

Was der Fehler bedeutet

Dem Token fehlt ein Claim, den deine Prüfoptionen zur Pflicht machen. jose behandelt einen Claim nicht nur dann als erforderlich, wenn du ihn in `requiredClaims` aufführst, sondern auch immer dann, wenn du es anweist, diesen Claim zu prüfen: `audience` verlangt `aud`, `issuer` verlangt `iss`, `subject` verlangt `sub` und `maxTokenAge` verlangt `iat`. Der Name des Claims in Anführungszeichen zeigt dir, welcher fehlt; die Signatur war bereits gültig.

Warum der Fehler auftritt

So behebst du den Fehler

  1. 1.

    Fehlenden Claim und vorhandene Claims protokollieren

    Das Fehlerobjekt stellt `claim`, `reason` und die dekodierte `payload` bereit. Protokollierst du sie, unterscheidest du mit einer einzigen Anfrage „der Aussteller schreibt ihn nicht“ von „das falsche Token wurde gesendet“.

    js
    import { errors, jwtVerify } from "jose";
    
    try {
      await jwtVerify(token, jwks, { algorithms: ["ES256"], audience: "https://api.example.com" });
    } catch (err) {
      if (err instanceof errors.JWTClaimValidationFailed && err.reason === "missing") {
        console.error("token lacks claim:", err.claim, "claims present:", Object.keys(err.payload));
      }
      throw err;
    }
  2. 2.

    Claim vom Aussteller aufnehmen lassen

    Korrigiere lieber das Token, statt die Prüfung zu lockern. Erst `aud`, `iss` und `exp` machen es sicher, ein JWT zu akzeptieren; RFC 8725 empfiehlt, dass jedes Token sie enthält.

    js
    import { SignJWT } from "jose";
    
    const token = await new SignJWT({ scope: "orders:read" })
      .setProtectedHeader({ alg: "ES256", kid })
      .setIssuer("https://issuer.example.com")
      .setAudience("https://api.example.com")   // the claim the verifier requires
      .setIssuedAt()
      .setExpirationTime("10m")
      .sign(privateKey);

Verwandte Fehler

Gesamte Signaturfehler-Datenbank durchsuchen