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ã tiêu đề JWS mà không xác minh chữ ký trên JWS và ghi từng tiêu đề vào một biến luồng. Chính sách này hữu ích nhất khi được dùng cùng với chính sách VerifyJWS, khi bạn phải biết giá trị của một tiêu đề trong JWS trước khi xác minh chữ ký của JWS.
JWS có thể có tải trọng đính kèm, ở dạng:
header.payload.signature
Hoặc JWS có thể bỏ qua tải trọng (gọi là tải trọng độc lập) và có dạng:
header..signature
Chính sách DecodeJWS hoạt động với cả hai biểu mẫu vì chính sách này chỉ giải mã phần tiêu đề của JWS. Chính sách DecodeJWS cũng hoạt động bất kể thuật toán nào được dùng để ký JWS.
Hãy xem Tổng quan về các chính sách JWS và JWT để biết thông tin giới thiệu chi tiết và tổng quan về định dạng của JWS.
Video
Xem video ngắn này để tìm hiểu cách giải mã JWT. Mặc dù video này dành riêng cho JWT, nhưng nhiều khái niệm cũng tương tự đối với JWS.
Ví dụ: Giải mã JWS
Chính sách bên dưới sẽ giải mã một JWS có trong biến luồng var.JWS. Biến này phải có và chứa một JWS khả thi (có thể giải mã). Chính sách này có thể lấy JWS từ bất kỳ biến luồng nào.
<DecodeJWS name="JWS-Decode-HS256"> <DisplayName>JWS Verify HS256</DisplayName> <Source>var.JWS</Source> </DecodeJWS>
Đối với mỗi tiêu đề trong phần tiêu đề của JWS, chính sách sẽ đặt một biến luồng có tên:
jws.policy-name.header.header-name
Nếu JWS có tải trọng được đính kèm, thì JWS sẽ đặt biến luồng jws.policy-name.header.payload thành tải trọng. Đối với tải trọng tách rời, payload đang trống.
Hãy xem phần Biến luồng để biết danh sách đầy đủ các biến do chính sách này đặt.
Tài liệu tham khảo về phần tử cho Giải mã JWS
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ã JWS.
Các thuộc tính áp dụng cho phần tử cấp cao nhất
<DecodeJWS name="JWS" 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>JWS-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 JWS để 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 JWS và Giải mã JWS đã được thiết lập biến ngữ cảnh theo mẫu sau:
jws.{policy_name}.{variable_name}
Ví dụ: nếu tên chính sách là verify-jws, thì chính sách sẽ lưu trữ
thuật toán được chỉ định trong JWS cho biến ngữ cảnh này:
jws.verify-jws.header.algorithm
| Tên biến | Mô tả |
|---|---|
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 đề. |
header.algorithm |
Thuật toán ký dùng trên JWS. 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 JWS được tạo. Xem thêm bài viết "Sử dụng bộ khoá web JSON (JWKS)" tại JWT và JWS tổng quan về chính sách để xác minh JWS. Hãy xem Tham số tiêu đề(Mã khoá) để tìm hiểu thêm. |
header.type |
Giá trị loại tiêu đề. Xem Thông số tiêu đề(Loại) để tìm hiểu thêm. |
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 JWS. |
header-json |
Tiêu đề ở định dạng JSON. |
payload |
Tải trọng JWS nếu JWS có một tải trọng đính kèm. Đối với tải trọng tách rời, biến này trống. |
valid |
Trong trường VerifyJWS, 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ị notBefore mã thông báo, nếu chúng
đều có sẵn. Còn không thì cờ này sẽ là false.
Trong trường hợp DecodeJWS, 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 | Xảy ra khi |
|---|---|---|
steps.jws.FailedToDecode |
401 | Chính sách không thể giải mã JWS. JWS có thể bị hỏng. |
steps.jws.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.jws.InvalidClaim |
401 | Đối với thông báo xác nhận quyền sở hữu bị thiếu hoặc không khớp hoặc thiếu tiêu đề hoặc tiêu đề không khớp. |
steps.jws.InvalidJsonFormat |
401 | Tìm thấy JSON không hợp lệ trong tiêu đề JWS. |
steps.jws.InvalidJws |
401 | Lỗi này xảy ra khi không xác minh được chữ ký JWS. |
steps.jws.InvalidPayload |
401 | Tải trọng JWS không hợp lệ. |
steps.jws.InvalidSignature |
401 | <DetachedContent> bị bỏ qua và JWS có tải trọng nội dung tách rời. |
steps.jws.MissingPayload |
401 | Thiếu tải trọng JWS. |
steps.jws.NoAlgorithmFoundInHeader |
401 | Xảy ra khi JWS bỏ qua tiêu đề thuật toán. |
steps.jws.UnknownException |
401 | Đã xảy ra ngoại lệ không xác định. |
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 | Xảy ra khi |
|---|---|
InvalidAlgorithm |
Các giá trị hợp lệ duy nhất là: RS256, RS384, RS512, PS256, PS384, PS512, ES256, ES384, ES512, HS256, HS384, HS512. |
|
|
Các lỗi triển khai khác có thể xảy ra. |
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" |
JWS.failed |
Tất cả các chính sách JWS đều đặt cùng một biến trong trường hợp có lỗi. | jws.JWS-Policy.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="JWS Policy Errors">
<Step>
<Name>JavaScript-1</Name>
<Condition>(fault.name Matches "TokenExpired")</Condition>
</Step>
<Condition>JWS.failed=true</Condition>
</FaultRule>
</FaultRules>