Esta é a documentação da Apigee e da Apigee híbrida.
Confira a documentação da Apigee Edge.
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://$EXTERNAL_IP/v1/decodeJWT" -H "Authorization: Bearer eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"
Em que
$EXTERNAL_IP
é o IP do balanceador de carga externo. Esse endereço IP é exposto à Internet. Veja mais informações em Configurar o roteamento.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://$EXTERNAL_IP/v1/decodeJWT" -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"
Em que $EXTERNAL_IP
é o IP do balanceador de carga externo.
Esse endereço IP é exposto à Internet. Veja mais informações em
Configurar o roteamento.
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://$EXTERNAL_IP/v1/decodeJWT"
Em que $EXTERNAL_IP
é o IP do balanceador de carga externo.
Esse endereço IP é exposto à Internet. Veja mais informações em
Configurar o roteamento.
Because the authorization request header is not passed, the Decode JWT policy fails with the error:
```
"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://$EXTERNAL_IP/v1/decodeJWT" -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"
Em que $EXTERNAL_IP
é o IP do balanceador de carga externo.
Esse endereço IP é exposto à Internet. Veja mais informações em
Configurar o roteamento.