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

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 sieciowy JSON (JWT) określony w elemencie <Source> zasady dekodowania JWT jest nieprawidłowy, nieprawidłowy lub w inny sposób nie umożliwia dekodowania.

Prawidłowo sformatowany token JWT powinien zawierać nagłówek, ładunek i podpis w tym formacie: header.payload.signature. Jeśli w tokenie JWT przekazywanym do zasady DecodeJWT brakuje części składowej, wystąpi błąd. Jeśli na przykład token JWT zawiera tylko payload.signature, ale brakuje w nim header, wystąpi błąd.

Diagnostyka

  1. Wskaż zmienną określoną w elemencie <Source> zasady JWT. Ta zmienna powinna zawierać token JWT.

    Oto przykładowa zasada dekodowania 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 znajdować się w nagłówku żądania autoryzacji.

  2. Sprawdź zmienną zidentyfikowaną w kroku 1 i sprawdź, czy zawiera ona prawidłowy token JWT. Jeśli podany token JWT jest nieprawidłowy, jest to przyczyną błędu.

    W przykładowym żądaniu interfejsu API poniżej token JWT jest przekazywany w nagłówku żądania Autoryzacja:

    curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT" -H "Authorization: Bearer eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"
    

    Po dokładnym sprawdzeniu tokena JWT wykazano, że ma on nieprawidłowy format payload.signature. Oczekiwany format JWT to header.payload.signature. W wyniku tego zasada Dekoduj JWT kończy się niepowodzeniem z błędem :

    "faultstring": "Failed to Decode Token: policy({0})"
    

Rozdzielczość

Upewnij się, że token JWT przekazany do reguły Dekoduj JWT zawiera wszystkie 3 elementy, jest prawidłowo sformatowany i można go zdekodować.

Aby poprawić powyższy przykład, możesz podać prawidłowy token JWT w formacie header.payload.signature. Aby to zrobić, wywołaj 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 dekodowania JWT to:

  • poza zakresem (niedostępne w ramach konkretnego procesu, w którym są realizowane zasady) lub
  • nie może zostać rozwiązana (nie jest zdefiniowana).

Diagnostyka

  1. Wskaż zmienną określoną w elemencie <Source> zasady JWT. Ta zmienna powinna zawierać token JWT.

    Oto przykład zasady dekodowania 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. Sprawdź, czy zmienna określona w kroku 1 jest zdefiniowana i dostępna w przepływie, w którym jest wykonywana zasada Dekoduj JWT.

  3. Jeśli zmienna jest:

    • poza zakresem (niedostępne w ramach konkretnego procesu, w którym jest wykonywana zasada) lub
    • nie może zostać rozwiązana (nie jest zdefiniowana).

    to jest przyczyną błędu.

    W przykładowym żądaniu 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 dekodowania JWT kończy się niepowodzeniem z błędem:

    "faultstring": "Invalid token: policy({0})"
    

Rozdzielczość

Upewnij się, że zmienna, do której odwołuje się element <Source> w zasadach dekodowania tokena JWT, jest zdefiniowana, zawiera prawidłowy (możliwy do dekodowania) token JWT i jest dostępna w określonym przepływie, w którym są wykonywane zasady dekodowania tokena JWT.

Aby poprawić ten przykład, możesz przekazać prawidłowy token JWT w nagłówku autoryzacji żądania. Aby to zrobić, wywołaj 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"