Vous consultez la documentation Apigee Edge.
Accédez à la documentation sur Apigee X. info
FailedToDecode
Code d'erreur
steps.jwt.FailedToDecode
Corps de la réponse d'erreur
{
"fault": {
"faultstring": "Failed to Decode Token: policy({0})",
"detail": {
"errorcode": "steps.jwt.FailedToDecode"
}
}
}
Cause
Cette erreur se produit si le jeton Web JSON (JWT) spécifié dans l'élément <Source>
de la règle DecodeJWT est incorrect, non valide ou indécodable.
Un jeton JWT correctement structuré doit contenir un en-tête, une charge utile et une signature au format suivant : header.payload.signature
. Si un composant est manquant dans le jeton JWT transmis dans la règle DecodeJWT, l'erreur s'affiche. Par exemple, si le jeton JWT ne contient que payload.signature
, sans le paramètre header
, l'erreur survient.
Diagnostic
Identifiez la variable spécifiée dans l'élément
<Source>
de la règle DecodeJWT. Cette variable doit contenir le jeton JWT.Voici un exemple de règle DecodeJWT :
<DecodeJWT name="JWT-Decode-HS256"> <DisplayName>JWT Verify HS256</DisplayName> <Source>request.header.authorization</Source> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> </DecodeJWT>
Dans l'exemple ci-dessus, le jeton JWT doit être contenu dans l'en-tête de requête Authorization.
Examinez la variable identifiée à l'étape 1 et vérifiez si le jeton JWT qu'il contient est valide. Si le jeton d'entrée JWT n'est pas valide, il s'agit de la cause de l'erreur.
Dans l'exemple de requête API ci-dessous, le jeton d'entrée JWT est transmis dans l'en-tête de la requête d'autorisation :
curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT" -H "Authorization: Bearer eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"
Un examen minutieux du jeton JWT montre qu'il est au format
payload.signature
, qui n'est pas valide. Le format attendu pour le jeton JWT estheader.payload.signature
. Par conséquent, la règle DecodeJWT échoue avec l'erreur suivante :"faultstring": "Failed to Decode Token: policy({0})"
Solution
Assurez-vous que le jeton JWT transmis dans la règle DecodeJWT contient les trois éléments, qu'il est correctement formaté et qu'il peut être décodé.
Pour corriger l'exemple présenté ci-dessus, vous pouvez transmettre un jeton JWT valide au format header.payload.signature
. Pour ce faire, effectuez l'appel d'API à l'aide de la commande cURL comme suit :
curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT" -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"
InvalidToken
Code d'erreur
steps.jwt.InvalidToken
Corps de la réponse d'erreur
{
"fault": {
"faultstring": "Invalid token: policy({0})",
"detail": {
"errorcode": "steps.jwt.InvalidToken"
}
}
}
Cause
Cette erreur se produit si la variable de flux spécifiée dans l'élément <Source>
de la règle DecodeJWT est :
- hors du champ d'application (non disponible dans le flux spécifique où la règle est exécutée) ; ou
- impossible à résoudre (non définie).
Diagnostic
Identifiez la variable spécifiée dans l'élément
<Source>
de la règle DecodeJWT. Cette variable doit contenir le jeton JWT.Voici un exemple de règle DecodeJWT :
<DecodeJWT name="JWT-Decode-HS256"> <DisplayName>JWT Verify HS256</DisplayName> <Source>request.header.authorization</Source> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> </DecodeJWT>
Dans l'exemple ci-dessus, l'en-tête de requête Authorization doit contenir le jeton JWT.
Déterminez si la variable identifiée à l'étape 1 est définie et disponible dans le flux dans lequel la règle DecodeJWT est exécutée.
Si la variable est :
- hors du champ d'application (non disponible dans le flux spécifique où la règle est exécutée), ou
- impossible à résoudre (non définie),
alors il s'agit de la cause de l'erreur.
Dans l'exemple de requête API ci-dessous, le jeton JWT n'est pas transmis par l'utilisateur dans l'en-tête de requête d'autorisation.
curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT"
Comme l'en-tête de la requête d'autorisation n'est pas transmis, la règle DecodeJWT échoue avec l'erreur suivante:
"faultstring": "Invalid token: policy({0})"
Solution
Assurez-vous que la variable référencée dans l'élément <Source>
de la règle DecodeJWT est définie, qu'elle contient un jeton JWT valide (décodable) et qu'elle est disponible dans le flux spécifique où la règle DecodeJWT est exécutée.
Pour corriger l'exemple présenté ci-dessus, vous pouvez transmettre un jeton JWT valide dans l'en-tête de la requête d'autorisation. Pour ce faire, effectuez l'appel d'API à l'aide de la commande cURL comme suit :
curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT" -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"