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

Przeglądasz dokumentację Apigee Edge.
Przejdź do Dokumentacja Apigee X.
informacje.

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 zbudowany 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 być umieszczony w nagłówku żądania autoryzacji.

  2. Sprawdź zmienną zidentyfikowaną w kroku 1 i upewnij się, że zawarty w niej token JWT jest prawidłowy. Jeśli wejściowy token JWT jest nieprawidłowy, to właśnie jest 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"
    

    Po dokładnym sprawdzeniu tokena JWT wykazano, że ma on nieprawidłowy format payload.signature. Oczekiwany format tokena JWT to header.payload.signature. W efekcie zasada dekodowania JWT kończy się niepowodzeniem i wyświetla się błąd :

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

Rozdzielczość

Sprawdź, czy token JWT przekazywany do zasady dekodowania JWT zawiera wszystkie 3 elementy, jest prawidłowo sformatowany i można go dekodować.

Aby poprawić przykład powyżej, możesz przekazać prawidłowy token JWT w formacie header.payload.signature. Aby to zrobić, wywołaj interfejs API przy użyciu polecenia cURL w następujący 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żna rozwiązać (nie jest zdefiniowany)

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 nagłówek żądania autoryzacji powinien zawierać token JWT.

  2. Określ, czy zmienna określona w kroku 1 jest zdefiniowana i dostępna w przepływie, w którym wykonywana jest zasada dekodowania tokena JWT.

  3. Jeśli zmienna to:

    • poza zakresem (niedostępne w ramach konkretnego procesu, w którym są realizowane zasady) lub
    • nie można rozwiązać (nie jest zdefiniowany)

    to właśnie jest przyczyną błędu.

    W przykładowym żądaniu 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 dekodowania tokena JWT kończy się niepowodzeniem i wyświetlany jest błąd:

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

Rozdzielczość

Sprawdź, czy zmienna, do której odwołuje się element <Source> zasady JWT dekodowania, zawiera prawidłowy (możliwie do dekodowania) token JWT i jest dostępna w konkretnym przepływie, w którym wykonywana jest zasada 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 przy użyciu polecenia cURL w następujący sposób:

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