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
Nội dung
Giải mã JWT mà không xác minh chữ ký trên JWT. Chính sách này hữu ích nhất khi được dùng cùng với chính sách VerifyJWT, khi bạn phải biết giá trị của một khai báo trong JWT trước khi xác minh chữ ký của JWT.
Chính sách Giải mã JWT hoạt động bất kể thuật toán nào được dùng để ký JWT. Hãy xem bài viết Tổng quan về chính sách JWS và JWT để biết thông tin giới thiệu chi tiết.
Video
Xem video ngắn này để tìm hiểu cách giải mã JWT.
Ví dụ: Giải mã JWT
Chính sách bên dưới sẽ giải mã một JWT có trong biến luồng var.jwt. Biến này phải có và chứa một JWT khả thi (có thể giải mã). Chính sách này có thể lấy JWT từ bất kỳ biến luồng nào.
<DecodeJWT name="JWT-Decode-HS256"> <DisplayName>JWT Verify HS256</DisplayName> <Source>var.jwt</Source> </DecodeJWT>
Chính sách này ghi đầu ra vào các biến ngữ cảnh để các chính sách hoặc điều kiện tiếp theo trong proxy API có thể kiểm tra những giá trị đó. Hãy xem phần Biến luồng để biết danh sách các biến do chính sách này đặt.
Tham chiếu phần tử để giải mã JWT
Tài liệu tham khảo về chính sách này mô tả các phần tử và thuộc tính của chính sách Giải mã JWT.
Các thuộc tính áp dụng cho phần tử cấp cao nhất
<DecodeJWT name="JWT" continueOnError="false" enabled="true" async="false">
Các thuộc tính sau đây là thuộc tính chung của tất cả các phần tử chính của chính sách.
| Thuộc tính | Nội dung mô tả | Mặc định | Sự hiện diện |
|---|---|---|---|
| tên |
Tên nội bộ của chính sách. Bạn chỉ có thể dùng các ký tự sau trong tên:
A-Z0-9._\-$ %. Tuy nhiên, giao diện người dùng quản lý Edge sẽ áp dụng thêm các hạn chế, chẳng hạn như tự động xoá các ký tự không phải là chữ và số.
Bạn có thể tuỳ ý sử dụng phần tử |
Không áp dụng | Bắt buộc |
| continueOnError |
Đặt thành false để trả về lỗi khi một chính sách không thành công. Đây là hành vi dự kiến đối với hầu hết các chính sách.
Đặt thành |
false | Không bắt buộc |
| đang bật |
Đặt thành true để thực thi chính sách.
Đặt thành |
true | Không bắt buộc |
| không đồng bộ | Thuộc tính này không được dùng nữa. | false | Không được dùng nữa |
<DisplayName>
<DisplayName>Policy Display Name</DisplayName>
Sử dụng cùng với thuộc tính name để gắn nhãn chính sách trong trình chỉnh sửa proxy giao diện người dùng quản lý bằng một tên khác bằng ngôn ngữ tự nhiên.
| Mặc định | Nếu bạn bỏ qua phần tử này, giá trị của thuộc tính tên của chính sách sẽ được sử dụng. |
| Sự hiện diện | Không bắt buộc |
| Loại | Chuỗi |
<Source>
<Source>jwt-variable</Source>
Nếu có, hãy chỉ định biến luồng mà chính sách dự kiến sẽ tìm thấy JWT để giải mã.
| Mặc định | request.header.authorization (Xem lưu ý ở trên để biết thông tin quan trọng về chế độ mặc định). |
| Sự hiện diện | Không bắt buộc |
| Loại | Chuỗi |
| Giá trị hợp lệ | Tên biến quy trình Edge |
Biến luồng
Sau khi thành công, các chính sách Xác minh JWT và Giải mã JWT được đặt biến ngữ cảnh theo mẫu sau:
jwt.{policy_name}.{variable_name}
Ví dụ: nếu tên chính sách là jwt-parse-token, thì chính sách sẽ lưu trữ
đối tượng được chỉ định trong JWT thành biến ngữ cảnh có tên jwt.jwt-parse-token.decoded.claim.sub.
(Để có khả năng tương thích ngược, thư viện này cũng sẽ có trong jwt.jwt-parse-token.claim.subject)
| Tên biến | Mô tả |
|---|---|
claim.audience |
Đối tượng JWT. Giá trị này có thể là một chuỗi hoặc một mảng chuỗi. |
claim.expiry |
Ngày/giờ hết hạn, được biểu thị bằng mili giây kể từ thời gian bắt đầu của hệ thống. |
claim.issuedat |
Ngày phát hành mã thông báo, được biểu thị bằng mili giây kể từ thời gian bắt đầu của hệ thống. |
claim.issuer |
Yêu cầu của nhà phát hành JWT. |
claim.notbefore |
Nếu JWT bao gồm xác nhận quyền sở hữu nbf, biến này sẽ chứa giá trị được biểu thị bằng mili giây kể từ thời gian bắt đầu của hệ thống. |
claim.subject |
Chủ thể JWT xác nhận quyền sở hữu. |
claim.name |
Giá trị của thông báo xác nhận quyền sở hữu có tên (tiêu chuẩn hoặc bổ sung) trong tải trọng. Một trong những mức giá trị này sẽ được đặt cho mọi xác nhận quyền sở hữu trong tải trọng. |
decoded.claim.name |
Giá trị có thể phân tích cú pháp JSON của thông báo xác nhận quyền sở hữu đã nêu (tiêu chuẩn hoặc bổ sung) trong tải trọng. Một biến được đặt cho
mọi xác nhận quyền sở hữu trong tải trọng. Ví dụ: bạn có thể sử dụng decoded.claim.iat để
truy xuất thời điểm phát hành JWT, được biểu thị bằng giây kể từ thời gian bắt đầu của hệ thống. Khi bạn
cũng có thể sử dụng các biến luồng claim.name. Đây là
biến được đề xuất dùng để truy cập vào thông báo xác nhận quyền sở hữu. |
decoded.header.name |
Giá trị có thể phân tích cú pháp JSON của một tiêu đề trong tải trọng. Một biến được đặt cho
mọi tiêu đề trong tải trọng. Mặc dù bạn cũng có thể sử dụng các biến luồng header.name,
đây là biến được đề xuất dùng để truy cập vào tiêu đề. |
expiry_formatted |
Ngày/giờ hết hạn, được định dạng dưới dạng một chuỗi mà con người có thể đọc được. Ví dụ: 2017-09-28T21:30:45.000+0000 |
header.algorithm |
Thuật toán ký dùng trên JWT. Ví dụ: RS256, HS384, v.v. Hãy xem mục Thông số tiêu đề(Thuật toán) để tìm hiểu thêm. |
header.kid |
Mã khoá, nếu được thêm vào khi JWT được tạo. Xem thêm bài viết "Sử dụng bộ khoá web JSON (JWKS)" tại JWT tổng quan về chính sách để xác minh JWT. Hãy xem Tham số tiêu đề(Mã khoá) để tìm hiểu thêm. |
header.type |
Sẽ được đặt thành JWT. |
header.name |
Giá trị của tiêu đề có tên (tiêu chuẩn hoặc bổ sung). Một trong những mức giá trị này sẽ được đặt cho mọi tiêu đề bổ sung trong phần tiêu đề của JWT. |
header-json |
Tiêu đề ở định dạng JSON. |
is_expired |
true hoặc false |
payload-claim-names |
Một loạt các thông báo xác nhận quyền sở hữu được JWT hỗ trợ. |
payload-json |
Tải trọng ở định dạng JSON.
|
seconds_remaining |
Số giây trước khi mã thông báo hết hạn. Nếu mã thông báo đã hết hạn, số này sẽ là số âm. |
time_remaining_formatted |
Thời gian còn lại trước khi mã thông báo hết hạn, có định dạng là chuỗi mà con người có thể đọc được. Ví dụ: 00:59:59.926 |
valid |
Trong trường VerifyJWT, biến này sẽ có giá trị true khi chữ ký được xác minh và
thời gian hiện tại là trước khi mã thông báo hết hạn và sau giá trị not Google trước giá trị, nếu chúng
đều có sẵn. Còn không thì cờ này sẽ là false.
Trong trường hợp DecodeJWT, biến này không được thiết lập. |
Tham chiếu lỗi
Phần này mô tả các mã lỗi và thông báo lỗi được trả về, cũng như các biến lỗi do Edge đặt khi chính sách này kích hoạt lỗi. Thông tin này đóng vai trò quan trọng trong việc phát triển các quy tắc lỗi để xử lý lỗi. Để tìm hiểu thêm, hãy xem Những điều bạn cần biết về lỗi chính sách và Xử lý lỗi.
Lỗi thời gian chạy
Những lỗi này có thể xảy ra khi thực thi chính sách.
| Mã lỗi | Trạng thái HTTP | Nguyên nhân | Khắc phục |
|---|---|---|---|
steps.jwt.FailedToDecode |
401 | Xảy ra khi chính sách không thể giải mã JWT. JWT có thể không đúng định dạng, không hợp lệ hoặc không thể giải mã. | build |
steps.jwt.FailedToResolveVariable |
401 | Xảy ra khi biến luồng được chỉ định trong phần tử <Source> của
chính sách không tồn tại. |
|
steps.jwt.InvalidToken |
401 | Xảy ra khi biến luồng được chỉ định trong phần tử <Source> của
chính sách nằm ngoài phạm vi hoặc không thể giải quyết. |
build |
Lỗi triển khai
Những lỗi này có thể xảy ra khi bạn triển khai proxy chứa chính sách này.
| Tên lỗi | Nguyên nhân | Khắc phục |
|---|---|---|
InvalidEmptyElement |
Xảy ra khi biến luồng chứa JWT cần giải mã không được chỉ định trong phần tử <Source> của chính sách.
|
build |
Biến lỗi
Các biến này được đặt khi xảy ra lỗi thời gian chạy. Để biết thêm thông tin, hãy xem bài viết Những điều bạn cần biết về lỗi chính sách.
| Biến | Trong đó | Ví dụ: |
|---|---|---|
fault.name="fault_name" |
fault_name là tên của lỗi, như được liệt kê trong bảng Lỗi thời gian chạy ở trên. Tên lỗi là phần cuối cùng của mã lỗi. | fault.name Matches "TokenExpired" |
JWT.failed |
Tất cả các chính sách JWT đều đặt cùng một biến trong trường hợp không thành công. | JWT.failed = true |
Ví dụ về phản hồi khi gặp lỗi
Để xử lý lỗi, phương pháp hay nhất là bẫy phần errorcode của lỗi
của bạn. Đừng dựa vào văn bản trong faultstring vì văn bản này có thể thay đổi.
Ví dụ về quy tắc lỗi
<FaultRules>
<FaultRule name="JWT Policy Errors">
<Step>
<Name>JavaScript-1</Name>
<Condition>(fault.name Matches "TokenExpired")</Condition>
</Step>
<Condition>JWT.failed=true</Condition>
</FaultRule>
</FaultRules>