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 zweiten Parameter des Objekts
endpoints.Issuer
festgelegte URI des öffentlichen Schlüssels korrekt und gültig ist.
Fehler: Issuer not allowed
- Prüfen Sie, ob der Anspruch
"iss"
(issuer) in Ihrem JWT-Token mit dem ersten Parameter des Objektsendpoints.Issuer
übereinstimmt.
Fehler: Audience not allowed
Wenn die Anforderung "aud"
(audience) in einem JWT-Token dem Endpoints-Dienstnamen entspricht, validiert Cloud Endpoints Frameworks die Zielgruppe und ignoriert die im Argument audiences
der Decorator @endpoints.api
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:
- Prüfen Sie, ob der Anspruch
"aud"
im JWT mit einem der Werte im Argumentaudiences
im Decorator@endpoints.api
übereinstimmt.