您正在查看 Apigee Edge 說明文件。
查看 Apigee X 說明文件。 資訊
FailedToDecode
錯誤代碼
steps.jwt.FailedToDecode
錯誤回應主體
{
"fault": {
"faultstring": "Failed to Decode Token: policy({0})",
"detail": {
"errorcode": "steps.jwt.FailedToDecode"
}
}
}
原因
在解碼 JWT 政策的 <Source>
元素中,如果指定的 JSON Web Token (JWT) 格式有誤、無效或無法解碼,就會發生這個錯誤。
正確結構化的 JWT 應包含下列格式的標頭、酬載和簽名:header.payload.signature
。如果傳遞至 DecodeJWT 政策的 JWT 缺少元件部分,您會收到錯誤訊息。舉例來說,如果 JWT 只有 payload.signature
,但缺少其 header
,就會發生錯誤。
診斷
找出解碼 JWT 政策的
<Source>
元素中指定的變數。這個變數應包含 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
的格式無效。應採用header.payload.signature
做為 JWT 的格式。因此,Decode JWT 政策失敗,並出現以下錯誤:"faultstring": "Failed to Decode Token: policy({0})"
解析度
請確定傳送至 Decode JWT 政策的 JWT 包含所有三個元素、格式正確且可解碼。
如要修正上述示例,您可以傳入具有 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"
}
}
}
原因
如果在解碼 JWT 政策的 <Source>
元素中指定流程變數,就會發生這個錯誤:
- 超出範圍 (不適用於執行政策的特定流程) 或
- 無法解析 (未定義)
診斷
找出解碼 JWT 政策的
<Source>
元素中指定的變數。這個變數應包含 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"
由於並未傳送授權要求標頭,因此 Decode JWT 政策會失敗,並出現以下錯誤:
"faultstring": "Invalid token: policy({0})"
解析度
確保已定義解碼 JWT 政策 <Source>
元素中參照的變數、包含有效 (可解碼) 的 JWT,且可在執行 Decode JWT 政策的特定流程中使用。
如要修正上述範例,您可以在要求授權標頭中傳送有效的 JWT。方法是使用 cURL 指令執行 API 呼叫,如下所示:
curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT" -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"