現在、Apigee と Apigee ハイブリッドのドキュメントを表示しています。
Apigee Edge のドキュメントを表示する。
FailedToDecode
エラーコード
steps.jwt.FailedToDecode
エラー レスポンスの本文
{
"fault": {
"faultstring": "Failed to Decode Token: policy({0})",
"detail": {
"errorcode": "steps.jwt.FailedToDecode"
}
}
}
原因
このエラーは、Decode JWT ポリシーの <Source>
要素で指定された JSON Web Token(JWT)の形式が正しくない場合、無効である場合、または他の理由でデコードできない場合に発生します。
適切に構造化された JWT には、ヘッダー、ペイロード、署名を header.payload.signature
の形式で格納する必要があります。Decode JWT ポリシーに渡された JWT にコンポーネント部分がない場合、エラーが発生します。たとえば、JWT に payload.signature
しかなく、その header
がない場合は、エラーが発生します。
診断
Decode JWT ポリシーの
<Source>
要素で指定された変数を特定します。この変数には 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://$EXTERNAL_IP/v1/decodeJWT" -H "Authorization: Bearer eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"
ここで、
$EXTERNAL_IP
は、外部ロードバランサの IP アドレスです。この IP アドレスはインターネットに公開されます。詳細については、アクセス ルーティングをカスタマイズするをご覧ください。JWT を閉じると、
payload.signature
の形式が無効であることが示されます。JWT の正しい形式はheader.payload.signature
です。その結果、Decode JWT ポリシーが失敗し、次のエラーが発生します。"faultstring": "Failed to Decode Token: policy({0})"
解決策
Decode JWT ポリシーに渡される JWT に、3 つの要素すべてが含まれ、正しい形式になっており、デコード可能であることを確認してください。
上記の例を修正するには、header.payload.signature
の形式で有効な JWT を渡します。これを行うには、次のように cURL コマンドを使用して API を呼び出します。
curl -v "http://$EXTERNAL_IP/v1/decodeJWT" -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"
ここで、$EXTERNAL_IP
は、外部ロードバランサの IP アドレスです。この IP アドレスはインターネットに公開されます。詳細については、アクセス ルーティングをカスタマイズするをご覧ください。
InvalidToken
エラーコード
steps.jwt.InvalidToken
エラー レスポンスの本文
{
"fault": {
"faultstring": "Invalid token: policy({0})",
"detail": {
"errorcode": "steps.jwt.InvalidToken"
}
}
}
原因
このエラーは、Decode JWT ポリシーの <Source>
要素で指定されたフロー変数が以下の場合に発生します。
- 範囲外(ポリシーが実行されている特定のフローで使用できない)
- 解決できない(定義されていない)
診断
Decode JWT ポリシーの
<Source>
要素で指定された変数を特定します。この変数には JWT を含める必要があります。Decode JWT ポリシーの例を次に示します。
<DecodeJWT name="JWT-Decode-HS256"> <DisplayName>JWT Verify HS256</DisplayName> <Source>request.header.authorization</Source> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> </DecodeJWT>
上記の例では、Authorization リクエスト ヘッダーに JWT が含まれている必要があります。
手順 1 で特定された変数が定義されていて、Decode JWT ポリシーが実行されるフローで使用できることを確認します。
変数が次のいずれかの状態になっていないか確認します。
- 範囲外(ポリシーが実行されている特定のフローで使用できない)
- 解決できない(定義されていない)
いずれかの状態が当てはまる場合、それがエラーの原因です。
下記の API リクエストの例では、JWT がユーザーにより Authorization リクエスト ヘッダーで渡されていません。
curl -v "http://$EXTERNAL_IP/v1/decodeJWT"
ここで、$EXTERNAL_IP
は、外部ロードバランサの IP アドレスです。この IP アドレスはインターネットに公開されます。詳細については、アクセス ルーティングをカスタマイズするをご覧ください。
Because the authorization request header is not passed, the Decode JWT policy fails with the error:
```
"faultstring": "Invalid token: policy({0})"
```
解決策
Decode JWT ポリシーの <Source>
要素で参照される変数が定義され、有効な(デコード可能な)JWT が含まれ、Decode JWT ポリシーが実行される特定のフローで使用できることを確認します。
上記の例を修正するには、リクエスト Authorization ヘッダーで有効な JWT を渡します。これを行うには、次のように cURL コマンドを使用して API を呼び出します。
curl -v "http://$EXTERNAL_IP/v1/decodeJWT" -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"
ここで、$EXTERNAL_IP
は、外部ロードバランサの IP アドレスです。この IP アドレスはインターネットに公開されます。詳細については、アクセス ルーティングをカスタマイズするをご覧ください。