Diese Seite wurde von der Cloud Translation API übersetzt.
Switch to English

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-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: 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 Feld x-google-jwks_uri des OpenAPI-Dokuments angegebene öffentliche Schlüssel-URI korrekt und gültig ist.

Fehler: Issuer not allowed

  • Prüfen Sie, ob die"iss" (issuer) in Ihrem JWT-Token stimmt mit dem x-google-issuer in dersecurityDefinitions des Sicherheitsobjekts im OpenAPI-Dokument.

  • Prüfen Sie, ob das Sicherheitsobjekt für die aufgerufene API-Methode im OpenAPI-Dokument aktiviert ist.

In der Datei Beispieldatei openapi.yaml finden Sie ein Beispiel für die Beschreibung der Sicherheit auf Methodenebene mit den Objekten securityDefinition und security.

Fehler: Audience not allowed

Vergleichen Sie die Anforderung "aud" (audience) in einem JWT-Token, um festzustellen, ob sie mit dem Endpoints-Dienstnamen übereinstimmt, der dem Feld host im OpenAPI-Dokument entspricht.

Wenn die Anforderung "aud" und der Endpoints-Dienstname unterschiedlich sind:

  • Prüfen Sie, ob die Anforderung "aud" im JWT mit einem der x-google-audiences-Werte übereinstimmt, die im OpenAPI-Dokument angegeben sind.

  • Achten Sie darauf, dass sich x-google-audiences und x-google-issuer im selben securityDefinitions-Objekt in Ihrem OpenAPI-Dokument befinden.

Wenn die Anforderung "aud" und der Endpoints-Dienstname identisch sind, validiert der ESP die Zielgruppe und ignoriert die x-google-audiences-Werte in Ihrem OpenAPI-Dokument. 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.