Fehler in JWT-Validierung beheben

Wenn eine Clientanwendung ein JSON Web Token (JWT) in einer Anfrage an eine API enthält, validiert der Extensible Service Proxy (ESP) die JWT, bevor die Anfrage an das API-Back-End gesendet wird. Auf dieser Seite finden Sie Informationen zur Fehlerbehebung, falls die JWT-Validierung fehlschlägt und der ESP in der Antwort an den Client einen Fehler zurückgibt. Weitere Informationen zu JWTs finden Sie in RFC 7519.

Fehler: 401: Jwt issuer is not configured

Dies kann passieren, wenn Sie ESPv2 in Cloud Run bereitstellen und das Flag --allow-unauthenticated nicht im Befehl gcloud run deploy verwenden. Wenn das Flag nicht verwendet wird, wird das JWT-Token abgefangen und von Cloud Run <a=" docs=""managing-access"="" run="" secure=""> Zugriffssteuerung-IAM Server überprüft und nicht von ESPv2. IAM verwendet möglicherweise einen anderen Aussteller als ESPv2. </a=">

Fehler: BAD_FORMAT

Prüfen Sie Folgendes:

  • Achten Sie darauf, dass das JWT gültigen JSON-Code enthält.
  • Prüfe, ob der JWT-Header das Feld "alg" hat und auf einen der folgenden Werte festgelegt ist: "RS256", "HS256", "RS384", "HS384", "RS512" oder "HS512"
  • Prüfen Sie den Datentyp der folgenden Felder (falls vorhanden) in der JWT-Nutzlast:
    • Die Anforderungen "iat" (issued at), "exp" (expiration time) und "nbf" (not before) sind Zahlen größer als 0 und keine Strings.
    • Die Felder "sub" (subject), "iss" (issuer) und "jti" (JWT ID) sind Strings.
    • Die Anforderung "aud" (audience) ist entweder ein String oder ein Array mit Strings.
  • Die folgenden Anforderungen müssen in der JWT-Nutzlast vorhanden sein: "sub" (Betreff), "iss" (Aussteller) und "aud" (Zielgruppe).

Das folgende Beispiel enthält ein decodiertes gültiges JWT:

{
  "alg": "RS256",
  "typ": "JWT",
  "kid": "42ba1e234ac91ffca687a5b5b3d0ca2d7ce0fc0a"
}

Payload:
{
  "iss": "myservice@myproject.iam.gserviceaccount.com",
  "iat": 1493833746,
  "aud": "myservice.appspot.com",
  "exp": 1493837346,
  "sub": "myservice@myproject.iam.gserviceaccount.com"
}
Fehler: TIME_CONSTRAINT_FAILURE

Decodieren Sie das JWT mit jwt.io und stellen Sie Folgendes sicher:

  • Die Anforderung "exp" (expiration time) ist vorhanden.
  • Die Anforderung "exp" (expiration time) enthält einen Datum/Uhrzeit-Wert in der Zukunft. Das aktuelle Datum und die aktuelle Uhrzeit müssen vor dem Ablaufdatum und der Ablaufzeit liegen, die in der Anforderung "exp" angegeben sind.
  • Die Anforderung "nbf" (not before) ist, sofern vorhanden, ein Datum und eine Uhrzeit in der Vergangenheit. Das aktuelle Datum und die aktuelle Uhrzeit müssen nach dem Datum und der Uhrzeit liegen, die in der Anforderung "nbf" angegeben sind, oder diesen Werten entsprechen.
Fehler: UNKNOWN

Decodieren Sie das JWT mit jwt.io und gewährleisten Sie Folgendes:

  • Wenn die Anforderung "iss" (issuer) eine E-Mail-Adresse ist, müssen die Anforderungen "sub" (subject) und "iss" identisch sein. Damit wird bei E-Mail-Ausstellern sichergestellt, dass es sich um ein selbst ausgestelltes JWT handelt.

Fehler: KEY_RETRIEVAL_ERROR

  • Prüfen Sie, ob der im Feld jwksUri der Annotation ApiIssuer angegebene URI des öffentlichen Schlüssels korrekt und gültig ist.

Fehler: Issuer not allowed

  • Prüfen Sie, ob die Anforderung "iss" (Aussteller) im JWT-Token dem Wert von issuer in der Annotation ApiIssuer entspricht.

Fehler: Audience not allowed

Wenn die Anforderung "aud" (Zielgruppe) in einem JWT-Token dem Endpoints-Dienstnamen entspricht, validiert Cloud Endpoints Frameworks die Zielgruppe und ignoriert die im Element audiences der Annotation ApiIssuerAudience angegebenen Werte. Wenn Ihr Dienstname beispielsweise "myservice.appspot.com" lautet, ist ein JWT mit "aud" für "myservice.appspot.com" oder "https://myservice.appspot.com" eine gültige Zielgruppe.

Wenn die Anforderung "aud" nicht mit dem Endpoints-Dienstnamen identisch ist, gehen Sie so vor:

  • Prüfen Sie, ob die Anforderung "aud" im JWT einem der Werte im Element audiences in der Annotation ApiIssuerAudience entspricht.