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
jwks_uri
im Abschnittauthentication: 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 Feldissuer
im Abschnittauthentication: 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-.yaml
Konfigurationsdatei. 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 deraudiences
-Werte übereinstimmt, die im Abschnittauthentication: providers
der gRPC-.yaml
-Konfigurationsdatei angegeben sind.