Você está vendo a documentação do Apigee Edge.
Acesse a
documentação da
Apigee X. info
FailedToDecode
Código do erro
steps.jwt.FailedToDecode
Corpo da resposta de erro
{
"fault": {
"faultstring": "Failed to Decode Token: policy({0})",
"detail": {
"errorcode": "steps.jwt.FailedToDecode"
}
}
}
Causa
Esse erro ocorrerá se o JSON Web Token (JWT) especificado no elemento <Source>
da política de decodificação de JWT estiver malformado, inválido ou não puder ser decodificado.
Um JWT estruturado corretamente precisa conter um cabeçalho, um payload e uma assinatura no seguinte formato: header.payload.signature
. Se o JWT passado para a política DecodeJWT não tiver uma parte do componente, você receberá o erro. Por exemplo, se o JWT tiver apenas payload.signature
, mas não tiver header
, o erro ocorrerá.
Diagnóstico
Identifique a variável especificada no elemento
<Source>
da política de decodificação do JWT. Essa variável precisa conter o JWT.Veja um exemplo de política de decodificação de JWT:
<DecodeJWT name="JWT-Decode-HS256"> <DisplayName>JWT Verify HS256</DisplayName> <Source>request.header.authorization</Source> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> </DecodeJWT>
No exemplo acima, o JWT deve estar contido no cabeçalho de solicitação da autorização.
Analise a variável identificada na etapa 1 e verifique se o JWT é válido. Se o JWT de entrada não for válido, essa é a causa do erro.
No exemplo de solicitação de API abaixo, o JWT de entrada é transmitido no cabeçalho da solicitação de autorização:
curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT" -H "Authorization: Bearer eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"
O exame de fechamento do JWT mostra que o formato
payload.signature
é inválido. O formato esperado do JWT éheader.payload.signature
. Como resultado, a política de decodificação de JWT falha com o erro :"faultstring": "Failed to Decode Token: policy({0})"
Resolução
Verifique se o JWT transmitido para a política de decodificação de JWT contém os três elementos, está formatado corretamente e se pode ser decodificado.
Para corrigir o exemplo mostrado acima, transmita um JWT válido com o formato header.payload.signature
. Para isso, faça a chamada de API usando o comando cURL da seguinte forma:
curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT" -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"
InvalidToken
Código do erro
steps.jwt.InvalidToken
Corpo da resposta de erro
{
"fault": {
"faultstring": "Invalid token: policy({0})",
"detail": {
"errorcode": "steps.jwt.InvalidToken"
}
}
}
Causa
Esse erro ocorrerá se a variável de fluxo especificada no elemento <Source>
da política de decodificação de JWT for:
- fora do escopo (não disponível no fluxo específico em que a política está sendo executada) ou
- não é possível resolver (não está definida)
Diagnóstico
Identifique a variável especificada no elemento
<Source>
da política de decodificação do JWT. Essa variável precisa conter o JWT.Veja um exemplo de política de decodificação de JWT:
<DecodeJWT name="JWT-Decode-HS256"> <DisplayName>JWT Verify HS256</DisplayName> <Source>request.header.authorization</Source> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> </DecodeJWT>
No exemplo acima, o cabeçalho de solicitação de autorização deve conter o JWT.
Determine se a variável identificada na Etapa 1 está definida e disponível no fluxo em que a política de decodificação do JWT é executada.
Se a variável for:
- fora do escopo (não disponível no fluxo específico em que a política está sendo executada) ou
- não é possível resolver (não está definida)
essa será a causa do erro.
No exemplo de solicitação de API abaixo, o JWT não é transmitido no cabeçalho de solicitação de autorização do usuário.
curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT"
Como o cabeçalho da solicitação de autorização não é transmitido, a política Decode JWT falha com o erro:
"faultstring": "Invalid token: policy({0})"
Resolução
Verifique se a variável referenciada no elemento <Source>
da política de decodificação de JWT está definida, contém um JWT válido (decodificável) e está disponível no fluxo específico em que a política de decodificação de JWT está sendo executada.
Para corrigir o exemplo mostrado acima, transmita um JWT válido no cabeçalho de autorização de solicitação. Para isso, faça a chamada de API usando o comando cURL da seguinte forma:
curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT" -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"