<ph type="x-smartling-placeholder"></ph>
  現在、Apigee Edge のドキュメントが表示されています。
  
     Apigee X のドキュメント。 詳細
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://<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})"
解決策
Decode JWT ポリシーに渡される JWT に、3 つの要素すべてが含まれ、正しい形式になっており、デコード可能であることを確認してください。
上記の例を修正するには、header.payload.signature の形式で有効な JWT を渡します。これを行うには、次のように cURL コマンドを使用して API を呼び出します。
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"
     }
  }
}
原因
このエラーは、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://<org>-<env>.apigee.net/v1/decodeJWT" - 認証リクエスト ヘッダーが渡されないため、Decode JWT ポリシーは次のエラーで失敗します。 - "faultstring": "Invalid token: policy({0})"
解決策
Decode JWT ポリシーの <Source> 要素で参照される変数が定義され、有効な(デコード可能な)JWT が含まれ、Decode JWT ポリシーが実行される特定のフローで使用できることを確認します。
上記の例を修正するには、リクエスト Authorization ヘッダーで有効な JWT を渡します。これを行うには、次のように cURL コマンドを使用して API を呼び出します。
curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT" -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"