Bạn đang xem tài liệu về Apigee Edge.
Chuyển đến tài liệu về
Apigee X. thông tin
FailedToDecode
Mã lỗi
steps.jwt.FailedToDecode
Nội dung phản hồi lỗi
{
"fault": {
"faultstring": "Failed to Decode Token: policy({0})",
"detail": {
"errorcode": "steps.jwt.FailedToDecode"
}
}
}
Nguyên nhân
Lỗi này xảy ra nếu Mã thông báo web JSON (JWT) được chỉ định trong phần tử <Source>
của chính sách Giải mã JWT có định dạng không chính xác, không hợp lệ hoặc không thể giải mã.
JWT có cấu trúc đúng cách phải chứa tiêu đề, tải trọng và chữ ký ở định dạng sau: header.payload.signature
. Nếu JWT được truyền đến chính sách DecodeJWT bị thiếu một phần thành phần, thì bạn sẽ gặp lỗi. Ví dụ: nếu JWT chỉ có payload.signature
nhưng thiếu header
, lỗi sẽ xảy ra.
Chẩn đoán
Xác định biến được chỉ định trong phần tử
<Source>
của chính sách Giải mã JWT. Biến này phải chứa JWT.Dưới đây là chính sách mẫu về việc Giải mã JWT:
<DecodeJWT name="JWT-Decode-HS256"> <DisplayName>JWT Verify HS256</DisplayName> <Source>request.header.authorization</Source> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> </DecodeJWT>
Trong ví dụ trên, JWT phải nằm trong tiêu đề yêu cầu Uỷ quyền.
Kiểm tra biến được xác định trong Bước 1 và kiểm tra xem JWT chứa trong biến đó có hợp lệ hay không. Nếu JWT đầu vào không hợp lệ, thì đó là nguyên nhân gây ra lỗi.
Trong yêu cầu API mẫu bên dưới, JWT đầu vào được truyền trong tiêu đề yêu cầu Uỷ quyền:
curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT" -H "Authorization: Bearer eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"
Khi kiểm tra kỹ JWT, bạn sẽ thấy JWT có định dạng
payload.signature
không hợp lệ. Định dạng dự kiến của JWT làheader.payload.signature
. Do đó, chính sách Giải mã JWT không thành công với lỗi :"faultstring": "Failed to Decode Token: policy({0})"
Độ phân giải
Đảm bảo rằng JWT được truyền đến chính sách Giải mã JWT chứa cả ba phần tử, được định dạng chính xác và có thể giải mã.
Để sửa ví dụ ở trên, bạn có thể truyền vào một JWT hợp lệ có định dạng header.payload.signature
. Bạn có thể thực hiện việc này bằng cách thực hiện lệnh gọi API bằng lệnh cURL như sau:
curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT" -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"
InvalidToken
Mã lỗi
steps.jwt.InvalidToken
Nội dung phản hồi lỗi
{
"fault": {
"faultstring": "Invalid token: policy({0})",
"detail": {
"errorcode": "steps.jwt.InvalidToken"
}
}
}
Nguyên nhân
Lỗi này xảy ra nếu biến flow được chỉ định trong phần tử <Source>
của chính sách Decode JWT là:
- nằm ngoài phạm vi (không có trong luồng cụ thể mà chính sách đang được thực thi) hoặc
- không thể phân giải (chưa được xác định)
Chẩn đoán
Xác định biến được chỉ định trong phần tử
<Source>
của chính sách Giải mã JWT. Biến này phải chứa JWT.Dưới đây là ví dụ về chính sách Giải mã JWT:
<DecodeJWT name="JWT-Decode-HS256"> <DisplayName>JWT Verify HS256</DisplayName> <Source>request.header.authorization</Source> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> </DecodeJWT>
Trong ví dụ trên, tiêu đề của yêu cầu Uỷ quyền phải chứa JWT.
Xác định xem biến được xác định ở Bước 1 đã được xác định và có sẵn trong quy trình thực thi chính sách Giải mã JWT hay chưa.
Nếu biến là:
- ngoài phạm vi (không áp dụng trong quy trình cụ thể nơi chính sách đang được thực thi) hoặc
- không thể giải quyết (không xác định)
thì đó là nguyên nhân gây ra lỗi.
Trong yêu cầu API mẫu bên dưới, người dùng không truyền JWT trong tiêu đề yêu cầu uỷ quyền.
curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT"
Vì tiêu đề yêu cầu uỷ quyền không được truyền, nên chính sách Giải mã JWT không thành công với lỗi:
"faultstring": "Invalid token: policy({0})"
Độ phân giải
Đảm bảo rằng biến được tham chiếu trong phần tử <Source>
của chính sách Giải mã JWT được xác định, chứa JWT hợp lệ (có thể giải mã) và có trong luồng cụ thể mà chính sách Giải mã JWT đang được thực thi.
Để sửa ví dụ ở trên, bạn có thể truyền một JWT hợp lệ trong tiêu đề uỷ quyền yêu cầu. Bạn có thể thực hiện việc này bằng cách gọi API bằng lệnh cURL như sau:
curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT" -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"