Fehler in JWT-Validierung beheben

Wenn eine Clientanwendung einer API-Anfrage ein JSON Web Token (JWT) hinzufügt, validiert der Extensible Service Proxy (ESP) das JWT, bevor die Anfrage an das API-Backend 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üfen Sie, ob im JWT-Header das Feld "alg" enthalten und dafür einer 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.
  • Achten Sie darauf, dass die folgenden Anforderungen in der JWT-Nutzlast vorhanden sind: "sub" (subject), "iss" (issuer) und "aud" (audience).

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 jwks_uri im Abschnitt authentication: providers Ihres gRPC-.yaml Konfigurationsdatei korrekt und gültig ist.

Fehler: Issuer not allowed

  • Prüfen Sie, ob die Anforderung "iss" (issuer) im JWT mit dem Feld issuer im Abschnitt authentication: providers Ihrer gRPC-.yaml-Konfigurationsdatei übereinstimmt.

Fehler: Audience not allowed

Wenn die Anforderung "aud" (audience) in einem JWT mit dem Endpoints-Dienstnamen übereinstimmt, validiert der ESP die Zielgruppe und ignoriert die Werte von audiences in Ihrer gRPC-.yamlKonfigurationsdatei. Wenn Ihr Dienstname beispielsweise "myservice.endpoints.example-project-12345.cloud.goog" lautet, ist ein JWT mit "aud" für "myservice.endpoints.example-project-12345.cloud.goog" oder "https://myservice.endpoints.example-project-12345.cloud.goog" 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 mit einem der audiences-Werte übereinstimmt, die im Abschnitt authentication: providers der gRPC-.yaml-Konfigurationsdatei angegeben sind.