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

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

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

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

  2. Sprawdź, czy zmienna zidentyfikowana w kroku 1 jest zdefiniowana i dostępna w przepływie, w którym wykonywana jest zasada Decode JWT.

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