Przeglądasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X. Informacje
FailedToDecode
Kod błędu
steps.jwt.FailedToDecode
Treść odpowiedzi o błędzie
{
"fault": {
"faultstring": "Failed to Decode Token: policy({0})",
"detail": {
"errorcode": "steps.jwt.FailedToDecode"
}
}
}
Przyczyna
Ten błąd występuje, jeśli token sieciowy JSON (JWT) określony w elemencie <Source>
w zasadzie Decode JWT jest zniekształcony, nieprawidłowy lub z innego powodu nie można go usunąć.
Prawidłowo skonstruowany token JWT powinien zawierać nagłówek, ładunek i podpis w formacie header.payload.signature
. Jeśli w tokenie JWT przekazanym do zasady Decode JWT brakuje części komponentu, wystąpi błąd. Jeśli na przykład token JWT zawiera tylko payload.signature
, ale brakuje jego header
, wystąpi błąd.
Diagnostyka
Wskaż zmienną określoną w elemencie
<Source>
zasady Dekodowanie tokena JWT. Ta zmienna powinna zawierać token JWT.Oto przykładowa zasada dekodowania tokena JWT:
<DecodeJWT name="JWT-Decode-HS256"> <DisplayName>JWT Verify HS256</DisplayName> <Source>request.header.authorization</Source> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> </DecodeJWT>
W powyższym przykładzie token JWT powinien być zawarty w nagłówku żądania autoryzacji.
Sprawdź zmienną zidentyfikowaną w kroku 1 i upewnij się, że token JWT w niej jest prawidłowy. Jeśli wejściowy token JWT jest nieprawidłowy, to jest przyczyną błędu.
W poniższym przykładowym żądaniu do interfejsu API wejściowy token JWT jest przekazywany w nagłówku żądania autoryzacji:
curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT" -H "Authorization: Bearer eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"
Po dokładnym sprawdzeniu tokena JWT okazało się, że ma on nieprawidłowy format
payload.signature
. Oczekiwany format tokena JWT toheader.payload.signature
. W rezultacie zasada Dekodowania JWT kończy się niepowodzeniem i wyświetlany jest błąd :"faultstring": "Failed to Decode Token: policy({0})"
Rozdzielczość
Sprawdź, czy token JWT przekazany do zasady Dekodowania JWT zawiera wszystkie 3 elementy, jest poprawnie sformatowany i można go usunąć.
Aby poprawić przykład pokazany powyżej, możesz przekazać prawidłowy token JWT w formacie header.payload.signature
. Aby to zrobić, wywołaj interfejs API w ten sposób:
curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT" -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"
InvalidToken
Kod błędu
steps.jwt.InvalidToken
Treść odpowiedzi o błędzie
{
"fault": {
"faultstring": "Invalid token: policy({0})",
"detail": {
"errorcode": "steps.jwt.InvalidToken"
}
}
}
Przyczyna
Ten błąd występuje, jeśli zmienna przepływu określona w elemencie <Source>
w zasadzie dekodowania tokena JWT jest:
- poza zakresem (niedostępne w konkretnym procesie, w którym jest wykonywana zasada) lub
- Nie można rozwiązać (nie określono)
Diagnostyka
Wskaż zmienną określoną w elemencie
<Source>
zasady Dekodowanie tokena JWT. Ta zmienna powinna zawierać token JWT.Oto przykładowa zasada dekodowania tokena JWT:
<DecodeJWT name="JWT-Decode-HS256"> <DisplayName>JWT Verify HS256</DisplayName> <Source>request.header.authorization</Source> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> </DecodeJWT>
W powyższym przykładzie nagłówek żądania autoryzacji powinien zawierać token JWT.
Określ, czy zmienna określona w kroku 1 jest zdefiniowana i dostępna w procesie, w którym wykonywana jest zasada dekodowania tokena JWT.
Jeśli zmienna to:
- poza zakresem (niedostępne w konkretnym procesie, w którym jest wykonywana zasada) lub
- Nie można rozwiązać (nie określono)
to jest jego przyczyna.
W przykładowym żądaniu do interfejsu API poniżej token JWT nie jest przekazywany w nagłówku żądania autoryzacji przez użytkownika.
curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT"
Nagłówek żądania autoryzacji nie jest przekazywany, więc zasada dekodowania JWT kończy się niepowodzeniem i powoduje błąd:
"faultstring": "Invalid token: policy({0})"
Rozdzielczość
Sprawdź, czy zmienna, do której odwołuje się element <Source>
w zasadzie dekodowania tokena JWT, jest zdefiniowana, zawiera prawidłowy (z możliwością dekodowania) token JWT i jest dostępna w konkretnym procesie, w którym jest wykonywana zasada dekodowania tokena JWT.
Aby poprawić przykład opisany powyżej, możesz przekazać prawidłowy token JWT w nagłówku autoryzacji żądania. Aby to zrobić, wywołaj interfejs API w ten sposób:
curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT" -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"