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=">
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" }
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.
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
Ihres OpenAPI-Dokuments angegebene öffentliche Schlüssel-URI korrekt und gültig ist.
Fehler: Issuer not allowed
Prüfen Sie, ob die Anforderung
"iss"
(Aussteller) in Ihrem JWT-Token mit dem Feldx-google-issuer
im AbschnittsecurityDefinitions
des Sicherheitsobjekts in Ihrem OpenAPI-Dokument übereinstimmt.Prüfen Sie, ob das Sicherheitsobjekt für die aufgerufene API-Methode im OpenAPI-Dokument aktiviert ist.
Die Beispieldatei openapi.yaml veranschaulicht, wie die Sicherheit auf Methodenebene mit den Objekten securityDefinition
und security
beschrieben werden kann.
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-Token mit einem derx-google-audiences
-Werte übereinstimmt, die im OpenAPI-Dokument angegeben sind.Achten Sie darauf, dass sich
x-google-audiences
undx-google-issuer
im selbensecurityDefinitions
-Objekt in Ihrem OpenAPI-Dokument befinden.
Wenn die Anforderung "aud"
und der Endpoints-Dienstname identisch sind, prüft 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.