Вы просматриваете документацию Apigee Edge .
Перейдите к документации Apigee X. информация
Фауледтодекодировать
Код ошибки
steps.jwt.FailedToDecode
Тело ответа об ошибке
{
"fault": {
"faultstring": "Failed to Decode Token: policy({0})",
"detail": {
"errorcode": "steps.jwt.FailedToDecode"
}
}
}
Причина
Эта ошибка возникает, если веб-токен JSON (JWT), указанный в элементе <Source>
политики декодирования 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 передается в заголовке запроса авторизации:
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"
Инвалидтокен
Код ошибки
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"