Rozwiązywanie problemów z dekodowaniem w środowisku wykonawczym JWT

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

  1. 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.

  2. 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 to header.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

  1. 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.

  2. 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.

  3. 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"