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