Giải mã khắc phục sự cố lỗi thời gian chạy JWT

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 không đúng định dạ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 đế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 lại thiếu header, thì lỗi này sẽ xảy ra.

Chẩn đoán

  1. 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, JWT phải nằm trong tiêu đề Yêu cầu cấp quyền.

  2. Kiểm tra biến được xác định ở Bước 1 và kiểm tra xem JWT trong đó có hợp lệ hay không. Nếu JWT đầu vào không hợp lệ, thì đó chính 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 chuyển vào 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 tệp này có định dạng payload.signature không hợp lệ. Định dạng hợp lệ của JWT là header.payload.signature. Do đó, chính sách Decode JWT không thành công kèm theo 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 Decode 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 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 sử dụ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 JWT giải mã là:

  • ngoài phạm vi (không có trong quy trình cụ thể đang thực thi chính sách) hoặc
  • không thể phân giải (không xác định)

Chẩn đoán

  1. 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 Cấp quyền phải chứa JWT.

  2. 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.

  3. Nếu biến đó là:

    • ngoài phạm vi (không có trong quy trình cụ thể đang thực thi chính sách) hoặc
    • không thể phân giải (không xác định)

    thì đó chính là nguyên nhân gây ra lỗi.

    Trong yêu cầu API ví dụ bên dưới, người dùng không chuyển JWT vào tiêu đề của yêu cầu uỷ quyền.

    curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT"
    

    Do tiêu đề của yêu cầu uỷ 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ể 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 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 thực hiện lệnh gọi API sử dụng lệnh cURL như sau:

curl -v "http://<org>-<env>.apigee.net/v1/decodeJWT" -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJiMDhmODZhZi0zNWRhLTQ4ZjItOGZhYi1jZWYzOTA0NjYwYmQifQ.-xN_h82PHVTCMA9vdoHrcZxH-x5mb11y1537t3rGzcM"