Está a ver a documentação do Apigee e do Apigee Hybrid.
Ver documentação do
Apigee Edge.
FailedToDecode
Código de erro
steps.jwt.FailedToDecode
Corpo da resposta de erro
{
"fault": {
"faultstring": "Failed to Decode Token: policy({0})",
"detail": {
"errorcode": "steps.jwt.FailedToDecode"
}
}
}
Causa
Este erro ocorre se o símbolo da Web JSON (JWT) especificado no elemento <Source>
da política Decode JWT tiver um formato incorreto, for inválido ou não for descodificável.
Um JWT estruturado corretamente deve conter um cabeçalho, um payload e uma assinatura no seguinte formato: header.payload.signature
. Se o JWT transmitido para a política DecodeJWT não tiver um componente, recebe o erro. Por exemplo, se o JWT tiver apenas payload.signature
, mas não tiver o respetivo header
, ocorre o erro.
Diagnóstico
Identifique a variável especificada no elemento
<Source>
da política Decode JWT. Esta variável deve conter o JWT.Segue-se um exemplo de uma política de descodificaçã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 do pedido de autorização.
Examine a variável identificada no passo 1 e verifique se o JWT que contém é válido. Se o JWT de entrada não for válido, esse é o motivo do erro.
No exemplo de pedido da API abaixo, o JWT de entrada é transmitido no cabeçalho do pedido de autorização:
curl -v "http://$EXTERNAL_IP/v1/decodeJWT" -H "Authorization: Bearer eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"
Em que
$EXTERNAL_IP
é o endereço IP do balanceador de carga externo. Este endereço IP está exposto à Internet. Para mais informações, consulte o artigo Personalize o encaminhamento de acesso.Uma análise detalhada do JWT mostra que tem o formato
payload.signature
, que é inválido. O formato esperado do JWT éheader.payload.signature
. Consequentemente, a política Decode JWT falha com o erro :"faultstring": "Failed to Decode Token: policy({0})"
Resolução
Certifique-se de que o JWT transmitido para a política Decode JWT contém todos os três elementos, tem o formato correto e é descodificável.
Para corrigir o exemplo apresentado acima, pode transmitir um JWT válido com o formato header.payload.signature
. Isto pode ser feito através da chamada da API com 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 endereço IP do balanceador de carga externo.
Este endereço IP está exposto à Internet. Para mais informações, consulte o artigo
Personalize o encaminhamento de acesso.
InvalidToken
Código de erro
steps.jwt.InvalidToken
Corpo da resposta de erro
{
"fault": {
"faultstring": "Invalid token: policy({0})",
"detail": {
"errorcode": "steps.jwt.InvalidToken"
}
}
}
Causa
Este erro ocorre se a variável de fluxo especificada no elemento <Source>
da política Decode JWT:
- Fora do âmbito (não disponível no fluxo específico em que a política está a ser executada) ou
- não é possível resolver (não está definido)
Diagnóstico
Identifique a variável especificada no elemento
<Source>
da política Decode JWT. Esta variável deve conter o JWT.Segue-se um exemplo de uma política de descodificaçã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 do pedido de autorização deve conter o JWT.
Determine se a variável identificada no passo 1 está definida e disponível no fluxo em que a política Decode JWT é executada.
Se a variável for:
- Fora do âmbito (não disponível no fluxo específico em que a política está a ser executada) ou
- não é possível resolver (não está definido)
Nesse caso, essa é a causa do erro.
No pedido de API de exemplo abaixo, o JWT não é transmitido no cabeçalho do pedido de autorização pelo utilizador.
curl -v "http://$EXTERNAL_IP/v1/decodeJWT"
Em que $EXTERNAL_IP
é o endereço IP do balanceador de carga externo.
Este endereço IP está exposto à Internet. Para mais informações, consulte o artigo
Personalize o encaminhamento de acesso.
Because the authorization request header is not passed, the Decode JWT policy fails with the error:
```
"faultstring": "Invalid token: policy({0})"
```
Resolução
Certifique-se de que a variável referenciada no elemento <Source>
da política Decode JWT está definida, contém um JWT válido (decodificável) e está disponível no fluxo específico onde a política Decode JWT está a ser executada.
Para corrigir o exemplo apresentado acima, pode transmitir um JWT válido no cabeçalho de autorização do pedido. Isto pode ser feito através da chamada da API com 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 endereço IP do balanceador de carga externo.
Este endereço IP está exposto à Internet. Para mais informações, consulte o artigo
Personalize o encaminhamento de acesso.