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 về 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 đúng, không hợp lệ hoặc không thể giải mã.
Một JWT có cấu trúc phù hợp 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 vào chính sách Giải mãJWT bị thiếu 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
, 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.Dưới đâ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 được đưa vào tiêu đề Yêu cầu ủy quyền.
Kiểm tra biến được xác định trong Bước 1 và kiểm tra xem JWT mà biến đó chứa có hợp lệ hay không. Nếu đầu vào JWT 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, dữ liệu đầu vào JWT được chuyển vào tiêu đề Yêu cầu cấp quyền:
curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT" -H "Authorization: Bearer eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"
Sau khi kiểm tra kỹ JWT, bạn thấy tệp này 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 sẽ gặp lỗi :"faultstring": "Failed to Decode Token: policy({0})"
Độ phân giải
Đảm bảo rằng JWT được chuyển đến chính sách Giải mã JWT chứa cả 3 phần tử, được định dạng chính xác và có thể giải mã.
Để sửa ví dụ nêu trên, bạn có thể truyền vào một JWT hợp lệ theo đị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 về 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à:
- 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)
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, JWT không được người dùng chuyển vào tiêu đề của yêu cầu cấp quyền.
curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT"
Do tiêu đề của yêu cầu cấp quyền không được chuyển, nên chính sách Giải mã JWT sẽ gặp 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ể phân giải) 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ể chuyển một JWT hợp lệ vào 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"