Bạn đang xem tài liệu về Apigee Edge.
Truy cập vào
tài liệu 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 bị lỗi định dạng, không hợp lệ hoặc không thể giải mã theo cách khác.
Một JWT có cấu trúc phù hợp phải chứa tiêu đề, phần dữ liệu thực tế và chữ ký theo định dạng sau: header.payload.signature. Nếu JWT được truyền đến chính sách DecodeJWT bị thiếu một 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, thì 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.Sau đây là chính sách Giải mã JWT mẫu:
<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 đề của yêu cầu Uỷ quyền.
Kiểm tra biến được xác định ở Bước 1 và kiểm tra xem JWT mà biến đó chứa 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 đề của 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.signaturekhông hợp lệ. Định dạng hợp lệ của JWT làheader.payload.signature. Do đó, chính sách Giải mã JWT không thành công và gặp 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ả 3 phần tử, được định dạng đúng và có thể giải mã.
Để sửa ví dụ nêu trên, bạn có thể truyền 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 luồng được chỉ định trong phần tử <Source> của chính sách Giải mã JWT là:
- nằm ngoài phạm vi (không có trong quy trình 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.Sau đây là chính sách Giải mã JWT mẫu:
<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 trong Bước 1 có được xác định và có sẵn trong luồng mà chính sách Giải mã JWT được thực thi hay không.
Nếu biến là một trong hai trường hợp sau:
- nằm ngoài phạm vi (không có trong quy trình 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)
thì đó là nguyên nhân gây ra lỗi.
Trong ví dụ về Yêu cầu API bên dưới, người dùng không truyền JWT trong tiêu đề của yêu cầu uỷ quyền.
curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT"
Vì tiêu đề của 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 một JWT hợp lệ (có thể giải mã) và có sẵn trong quy trình cụ thể nơi chính sách Giải mã JWT đang được thực thi.
Để sửa ví dụ nêu trên, bạn có thể truyền một JWT hợp lệ trong tiêu đề uỷ quyền của yêu cầu. 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"