您正在查看 Apigee 和 Apigee Hybrid 說明文件。
查看
Apigee Edge 說明文件。
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
,就會發生錯誤。
診斷
找出「Decode 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://$EXTERNAL_IP/v1/decodeJWT" -H "Authorization: Bearer eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"
其中
$EXTERNAL_IP
是外部負載平衡器的 IP 位址。這個 IP 位址會公開在網際網路上。詳情請參閱「自訂存取路由」。仔細檢查 JWT 後,我們發現其格式為
payload.signature
,因此無效。JWT 的預期格式為header.payload.signature
。因此,解碼 JWT 政策失敗,並顯示以下錯誤訊息:"faultstring": "Failed to Decode Token: policy({0})"
解決方法
確認傳遞至「Decode JWT」政策的 JWT 包含所有三個元素、格式正確且可解碼。
如要修正上述範例,您可以傳入格式為 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。以下是 JWT 解碼政策範例:
<DecodeJWT name="JWT-Decode-HS256"> <DisplayName>JWT Verify HS256</DisplayName> <Source>request.header.authorization</Source> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> </DecodeJWT>
在上例中,授權要求標頭應包含 JWT。
判斷在執行解碼 JWT 政策的流程中,是否已定義並可使用步驟 1 中指出的變數。
如果變數為:
- 超出範圍 (在執行政策的特定流程中不可用),或
- 無法解析 (未定義)
則表示這是錯誤的原因。
在下方的 API 要求範例中,使用者並未在授權要求標頭中傳遞 JWT。
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 政策的特定流程中使用。
如要修正上述範例,您可以在要求授權標頭中傳遞有效的 JWT。只要使用 cURL 指令呼叫 API,即可完成這項操作,如下所示:
curl -v "http://$EXTERNAL_IP/v1/decodeJWT" -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"
其中 $EXTERNAL_IP
是外部負載平衡器的 IP 位址。這個 IP 位址會公開在網際網路上。詳情請參閱「自訂存取路由」。