Wyświetlasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X. info
FailedToDecode
Kod błędu
steps.jwt.FailedToDecode
Treść odpowiedzi na błąd
{
"fault": {
"faultstring": "Failed to Decode Token: policy({0})",
"detail": {
"errorcode": "steps.jwt.FailedToDecode"
}
}
}
Przyczyna
Ten błąd występuje, jeśli token JWT określony w elemencie <Source> zasady dekodowania tokena JWT jest nieprawidłowy, nieprawidłowo sformatowany lub nie można go zdekodować.
Prawidłowo skonstruowany JWT powinien zawierać nagłówek, ładunek i podpis w tym formacie: header.payload.signature. Jeśli w JWT przekazanym do zasady DecodeJWT brakuje części składowej, pojawi się błąd. Jeśli np. JWT zawiera tylko payload.signature, ale brakuje w nim header, wystąpi błąd.
Diagnostyka
Określ zmienną podaną w elemencie
<Source>zasady Dekoduj JWT. Ta zmienna powinna zawierać JWT.Oto przykładowe zasady dekodowania JWT:
<DecodeJWT name="JWT-Decode-HS256"> <DisplayName>JWT Verify HS256</DisplayName> <Source>request.header.authorization</Source> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> </DecodeJWT>W podanym wyżej przykładzie token JWT powinien znajdować się w nagłówku żądania autoryzacji.
Sprawdź zmienną zidentyfikowaną w kroku 1 i zobacz, czy zawiera ona prawidłowy token JWT. Jeśli wejściowy JWT jest nieprawidłowy, to jest to przyczyną błędu.
W przykładowym żądaniu do interfejsu API poniżej 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"
Szczegółowa analiza tokena JWT pokazuje, że ma on nieprawidłowy format
payload.signature. Oczekiwany format JWT toheader.payload.signature. W rezultacie zasada Decode JWT (Dekoduj JWT) kończy się niepowodzeniem z błędem :"faultstring": "Failed to Decode Token: policy({0})"
Rozdzielczość
Sprawdź, czy token JWT przekazywany do zasady Decode JWT zawiera wszystkie 3 elementy, ma prawidłowy format i można go zdekodować.
Aby poprawić przykład pokazany powyżej, możesz przekazać prawidłowy JWT w formacie header.payload.signature. Możesz to zrobić, wywołując interfejs API za pomocą polecenia cURL 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 na błąd
{
"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> zasady Decode JWT:
- poza zakresem (niedostępne w określonym procesie, w którym są wykonywane zasady) lub
- nie można rozstrzygnąć (nie jest zdefiniowana)
Diagnostyka
Określ zmienną podaną w elemencie
<Source>zasady Dekoduj JWT. Ta zmienna powinna zawierać JWT.Oto przykładowe zasady dekodowania JWT:
<DecodeJWT name="JWT-Decode-HS256"> <DisplayName>JWT Verify HS256</DisplayName> <Source>request.header.authorization</Source> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> </DecodeJWT>W podanym przykładzie nagłówek żądania autoryzacji powinien zawierać JWT.
Sprawdź, czy zmienna zidentyfikowana w kroku 1 jest zdefiniowana i dostępna w przepływie, w którym wykonywana jest zasada Decode JWT.
Jeśli zmienna ma wartość:
- poza zakresem (niedostępne w określonym procesie, w którym są wykonywane zasady) lub
- nie można rozstrzygnąć (nie jest zdefiniowana)
wtedy to jest przyczyną błędu.
W przykładzie żądania do interfejsu API poniżej użytkownik nie przekazuje tokena JWT w nagłówku żądania autoryzacji.
curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT"
Ponieważ nagłówek żądania autoryzacji nie jest przekazywany, zasada Decode JWT kończy się niepowodzeniem i wyświetla błąd:
"faultstring": "Invalid token: policy({0})"
Rozdzielczość
Sprawdź, czy zmienna, do której odwołuje się element <Source> zasady Decode JWT, jest zdefiniowana, zawiera prawidłowy (dekodowalny) token JWT i jest dostępna w konkretnym przepływie, w którym wykonywana jest zasada Decode JWT.
Aby poprawić powyższy przykład, możesz przekazać prawidłowy JWT w nagłówku autoryzacji żądania. Możesz to zrobić, wywołując interfejs API za pomocą polecenia cURL w ten sposób:
curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT" -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"