Вы просматриваете документацию по Apigee Edge.
Перейдите к документации по Apigee X. Информация
FailedToDecode
Код ошибки
steps.jwt.FailedToDecode
Тело ответа с ошибкой
{
"fault": {
"faultstring": "Failed to Decode Token: policy({0})",
"detail": {
"errorcode": "steps.jwt.FailedToDecode"
}
}
}
Причина
Эта ошибка возникает, если веб-токен JSON (JWT), указанный в элементе <Source> правила Decode JWT, имеет неверный формат, недействителен или не может быть декодирован.
Правильно структурированный токен JWT должен содержать заголовок, полезную нагрузку и подпись в следующем формате: header.payload.signature. Если в JWT, переданном правилу DecodeJWT, отсутствует какой-либо компонент, вы получите ошибку. Например, если в JWT есть только payload.signature, но отсутствует header, возникнет ошибка.
диагностика;
Определите переменную, указанную в элементе
<Source>правила Decode JWT. Эта переменная должна содержать JWT.Вот пример правил Decode JWT:
<DecodeJWT name="JWT-Decode-HS256"> <DisplayName>JWT Verify HS256</DisplayName> <Source>request.header.authorization</Source> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> </DecodeJWT>В приведенном выше примере JWT должен быть указан в заголовке запроса Authorization.
Проверьте переменную, указанную на шаге 1, и убедитесь, что содержащийся в ней JWT действителен. Если входной JWT-токен недействителен, это и будет причиной ошибки.
В приведенном ниже примере запроса к API входной JWT передается в заголовке запроса Authorization:
curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT" -H "Authorization: Bearer eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"
При проверке JWT было обнаружено, что он имеет недопустимый формат
payload.signature. Ожидаемый формат JWT:header.payload.signature. В результате политика Decode JWT завершается с ошибкой :"faultstring": "Failed to Decode Token: policy({0})"
Разрешение
Убедитесь, что JWT, переданный в правило Decode JWT, содержит все три элемента, имеет правильный формат и может быть декодирован.
Чтобы исправить пример, приведенный выше, можно передать действительный JWT в формате header.payload.signature. Для этого можно выполнить вызов API с помощью команды cURL, как показано ниже:
curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT" -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"
InvalidToken
Код ошибки
steps.jwt.InvalidToken
Тело ответа с ошибкой
{
"fault": {
"faultstring": "Invalid token: policy({0})",
"detail": {
"errorcode": "steps.jwt.InvalidToken"
}
}
}
Причина
Эта ошибка возникает, если переменная потока, указанная в элементе <Source> правила Decode JWT:
- недоступно (не поддерживается в определенном процессе, в котором выполняется правило);
- не может быть разрешен (не определен);
диагностика;
Определите переменную, указанную в элементе
<Source>правила Decode JWT. Эта переменная должна содержать JWT.Вот пример правил Decode JWT:
<DecodeJWT name="JWT-Decode-HS256"> <DisplayName>JWT Verify HS256</DisplayName> <Source>request.header.authorization</Source> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> </DecodeJWT>В приведенном выше примере заголовок запроса авторизации должен содержать JWT.
Определите, задана ли переменная, указанная на шаге 1, и доступна ли она в потоке, в котором выполняется правило Decode JWT.
Если переменная:
- недоступно (не поддерживается в определенном процессе, в котором выполняется правило);
- не может быть разрешен (не определен);
то это и есть причина ошибки.
В примере запроса к API ниже пользователь не передает JWT в заголовке запроса авторизации.
curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT"
Поскольку заголовок запроса авторизации не передается, правило Decode JWT завершается с ошибкой:
"faultstring": "Invalid token: policy({0})"
Разрешение
Убедитесь, что переменная, на которую ссылается элемент <Source> правила Decode JWT, определена, содержит действительный (декодируемый) токен JWT и доступна в определенном потоке, в котором выполняется правило Decode JWT.
Чтобы исправить приведенный выше пример, передайте действительный JWT в заголовке авторизации запроса. Для этого можно выполнить вызов API с помощью команды cURL, как показано ниже:
curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT" -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"