Bạn đang xem tài liệu về Apigee Edge.
Chuyển đến
Tài liệu về Apigee X. thông tin
Tính toán và xác minh Mã xác thực thông báo dựa trên hàm băm (HMAC). Thỉnh thoảng được gọi là Mã xác thực thông điệp được khoá hoặc hàm băm có khoá, HMAC sử dụng hàm băm mật mã như SHA-1, SHA-224, SHA-256, SHA-384, SHA-512 hoặc MD-5 được áp dụng cho một "thông báo" cùng với một khoá bí mật, để tạo chữ ký hoặc mã xác thực thư trên thư đó. Từ khoá "tin nhắn" vào đây tham chiếu đến bất kỳ luồng byte nào. Người gửi thông báo cũng có thể gửi HMAC đến người nhận, và người nhận có thể sử dụng HMAC để xác thực thông báo.
Để tìm hiểu thêm về HMAC, xem HMAC: Keyed-Hahash cho Xác thực Thư (rfc2104).
Mẫu
Tạo HMAC
<HMAC name='HMAC-1'> <Algorithm>SHA256</Algorithm> <SecretKey ref='private.secretkey'/> <IgnoreUnresolvedVariables>true|false</IgnoreUnresolvedVariables> <!-- optional --> <!-- The "message" can include fixed and multiple variable parts, including newlines and static functions. Whitespace is significant. --> <Message>Fixed Part {a_variable} {timeFormatUTCMs(timeFormatString1,system.timestamp)} {nonce} </Message> <!-- default encoding is base64 --> <Output encoding='base16'>name_of_variable</Output> </HMAC>
Xác minh HMAC
<HMAC name='HMAC-1'> <Algorithm>SHA256</Algorithm> <SecretKey ref='private.secretkey'/> <IgnoreUnresolvedVariables>true|false</IgnoreUnresolvedVariables> <!-- optional --> <!-- The "message" can include fixed and multiple variable parts, including newlines and static functions. Whitespace is significant. --> <Message>Fixed Part {a_variable} {timeFormatUTCMs(timeFormatString1,system.timestamp)} {nonce} </Message> <!-- VerificationValue is optional. Include it to perform an HMAC check. --> <VerificationValue encoding='base16' ref='expected_hmac_value'/> <!-- default encoding is base64 --> <Output encoding='base16'>name_of_variable</Output> </HMAC>
Việc tính toán chữ ký và xác minh chữ ký đó thực hiện giống hệt nhau của chúng tôi. Chính sách HMAC tính toán HMAC và có thể tuỳ ý xác minh HMAC với một giá trị dự kiến. Phần tử VerifyValue không bắt buộc (nếu có) hướng dẫn chính sách kiểm tra giá trị đã tính so với giá trị đã biết hoặc đã cho giá trị.
Tham chiếu phần tử cho HMAC
Tài liệu tham khảo chính sách mô tả các thành phần và thuộc tính của chính sách HMAC.
Những thuộc tính mà áp dụng cho phần tử cấp cao nhất
<HMAC name="HMAC" continueOnError="false" enabled="true" async="false">
Các thuộc tính sau đây áp dụng chung cho tất cả phần tử mẹ 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ể sử dụng các ký tự trong tên này:
A-Z0-9._\-$ % . Tuy nhiên, giao diện người dùng Apigee thực thi thêm
các hạn chế cụ thể, chẳng hạn như tự động xoá các ký tự không phải là chữ và số.
Bạn có thể dùng phần tử |
Không áp dụng | Bắt buộc |
continueOnError |
Đặt thành false để trả về lỗi khi chính sách không thành công. Điều này là 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 |
Hãy đặt thành true để thực thi chính sách này.
Đặt thành |
đúng | 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 |
<Algorithm>
<Algorithm>algorithm-name</Algorithm>
Chỉ định thuật toán băm để tính HMAC.
Mặc định | Không áp dụng |
Sự hiện diện | Bắt buộc |
Loại | Chuỗi |
Giá trị hợp lệ | SHA-1 , SHA-224 , SHA-256 , SHA-384 ,
SHA-512 và MD-5
Cấu hình chính sách chấp nhận tên thuật toán mà không phân biệt chữ hoa chữ thường, và
có hoặc không có dấu gạch ngang giữa các chữ cái và số . Ví dụ: |
<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 Apigee bằng một tên ngôn ngữ tự nhiên khác.
Mặc định | Nếu bạn bỏ qua phần tử này, hệ thống sẽ sử dụng giá trị của thuộc tính tên của chính sách. |
Sự hiện diện | Không bắt buộc |
Loại | Chuỗi |
<Message>
<Message>message_template_here</Message> or <Message ref='variable_here'/>
Chỉ định tải trọng thông báo cần ký. Dữ liệu đầu vào của phần tử này hỗ trợ mẫu thông báo (thay thế biến) để cho phép đưa các mục bổ sung vào trong thời gian chạy, chẳng hạn như dấu thời gian, số chỉ dùng một lần, danh sách tiêu đề hoặc thông tin khác. Ví dụ:
<Message>Fixed Part {a_variable} {timeFormatUTCMs(timeFormatString1,system.timestamp)} {nonce} </Message>
Mẫu thông báo có thể bao gồm các phần cố định và thay đổi được, kể cả dòng mới và hàm tĩnh. Khoảng trắng rất quan trọng.
Mặc định | Không áp dụng |
Sự hiện diện | Bắt buộc |
Loại | Chuỗi |
Giá trị hợp lệ | Mọi chuỗi đều hợp lệ đối với giá trị văn bản. Nếu bạn cung cấp thuộc tính ref ,
nó sẽ được ưu tiên hơn giá trị văn bản. Chính sách này đánh giá văn bản
hoặc biến được tham chiếu dưới dạng mẫu thông báo. |
<Output>
<Output encoding='encoding_name'>variable_name</Output>
Chỉ định tên của biến mà chính sách phải đặt bằng giá trị HMAC đã tính toán. Đồng thời, chỉ định phương thức mã hoá để sử dụng cho đầu ra.
Mặc định |
Biến đầu ra mặc định là Giá trị mặc định của thuộc tính |
Sự hiện diện | Không bắt buộc. Nếu không có phần tử này, chính sách sẽ đặt biến luồng
hmac.POLICYNAME.output với một giá trị được mã hoá base64. |
Loại | Chuỗi |
Giá trị hợp lệ | Để mã hoá, Các giá trị không phân biệt chữ hoa chữ thường; Giá trị văn bản của phần tử |
<SecretKey>
<SecretKey encoding='encoding_name' ref='private.secretkey'/>
Chỉ định khoá bí mật dùng để tính toán HMAC. Khoá này lấy từ dữ liệu đã tham chiếu được giải mã theo kiểu mã hoá cụ thể.
Mặc định |
Không có giá trị mặc định cho biến được tham chiếu;
thuộc tính Khi không có thuộc tính |
Sự hiện diện | Bắt buộc |
Loại | Chuỗi |
Giá trị hợp lệ | Đối với Việc sử dụng thuộc tính mã hoá cho phép bạn chỉ định khoá bao gồm các byte nằm ngoài phạm vi ký tự có thể in UTF-8. Ví dụ: giả sử cấu hình chính sách bao gồm: <SecretKey encoding='hex' ref='private.encodedsecretkey'/>
Giả sử
Trong trường hợp này, các byte khoá sẽ được giải mã như sau: [53 65 63 72 65 74 31 32 33]
(mỗi byte được biểu thị dưới dạng hex). Một ví dụ khác là nếu |
<VerificationValue>
<VerificationValue encoding='encoding_name' ref='variable_name'/> or <VerificationValue encoding='encoding_name'>string_value</VerificationValue>
(Không bắt buộc) Chỉ định giá trị xác minh cũng như thuật toán mã hoá được dùng để mã hoá giá trị xác minh. Chính sách sẽ sử dụng thuật toán này để giải mã giá trị.
Mặc định | Không có giá trị xác minh mặc định. Nếu phần tử này có mặt nhưng phần tử
Thiếu thuộc tính encoding . Chính sách này sử dụng phương thức mã hoá mặc định là base64 |
Sự hiện diện | Không bắt buộc |
Loại | Chuỗi |
Giá trị hợp lệ |
Các giá trị hợp lệ cho thuộc tính mã hoá là: Phương thức mã hoá của |
<IgnoreUnresolvedVariables>
<IgnoreUnresolvedVariables>true|false</IgnoreUnresolvedVariables>
Đặt thành false
nếu bạn muốn chính sách gửi lỗi khi bất kỳ biến được tham chiếu nào được chỉ định
không thể giải quyết được trong chính sách. Đặt thành true
để coi mọi biến không thể giải quyết là một chuỗi trống
(rỗng).
Giá trị boolean IgnoreUnresolvedVariables chỉ ảnh hưởng đến các biến được tham chiếu bởi
tin nhắn mẫu. Mặc dù SecretKey
và VerificationValue
đều có thể tham chiếu đến một biến, nhưng cả hai
trong số đó cần phải phân giải được, vì vậy cài đặt ignore
không áp dụng cho các mục đó.
Mặc định | Sai |
Sự hiện diện | Không bắt buộc |
Loại | Boolean |
Giá trị hợp lệ | true hoặc false |
Biến luồng
Chính sách này có thể đặt các biến này trong quá trình thực thi.
Biến | Mô tả | Ví dụ: |
---|---|---|
hmac.policy_name.message |
Chính sách này đặt biến này với thông báo có hiệu lực,
kết quả của việc đánh giá mẫu thông báo được chỉ định trong Message
. |
hmac.HMAC-Policy.message = "Hello, World" |
hmac.policy_name.output |
Lấy kết quả của
phép tính HMAC, khi phần tử Output thực hiện
không chỉ định tên biến. |
hmac.HMAC-Policy.output = /yyRjydfP+fBHTwXFgc5AZhLAg2kwCri+e35girrGw4= |
hmac.policy_name.outputencoding |
Lấy tên của phương thức mã hoá đầu ra. | hmac.HMAC-Policy.outputencoding = base64 |
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 mà Apigee đặt ra 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.hmac.UnresolvedVariable |
401 | Lỗi này xảy ra nếu biến được chỉ định trong chính sách HMAC:
|
steps.hmac.HmacVerificationFailed |
401 | Xác minh HMAC không thành công; giá trị xác minh được cung cấp không khớp với giá trị được tính toán. |
steps.hmac.HmacCalculationFailed |
401 | Chính sách này không thể tính HMAC. |
steps.hmac.EmptySecretKey |
401 | Giá trị của biến khoá bí mật đang trống. |
steps.hmac.EmptyVerificationValue |
401 | Biến chứa giá trị xác minh đang trống. |
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 | Trạng thái HTTP | Xảy ra khi |
---|---|---|
steps.hmac.MissingConfigurationElement |
401 | Lỗi này xảy ra khi thiếu một phần tử hoặc thuộc tính bắt buộc. |
steps.hmac.InvalidValueForElement |
401 | Lỗi này xảy ra nếu giá trị được chỉ định trong phần tử Thuật toán không phải là một trong các giá trị sau: SHA-1 , SHA-224 , SHA-256 , SHA-512 hoặc MD-5 . |
steps.hmac.InvalidSecretInConfig |
401 | Lỗi này xảy ra nếu có một giá trị văn bản được cung cấp rõ ràng cho SecretKey . |
steps.hmac.InvalidVariableName |
401 | Lỗi này xảy ra nếu biến SecretKey không chứa
tiền tố private (private. ). |
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 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 lỗi, như đã nêu trong Bảng Lỗi thời gian chạy ở trên. Tên lỗi là tên cuối cùng của mã lỗi. | fault.name Matches "UnresolvedVariable" |
hmac.policy_name.failed |
Chính sách này sẽ đặt biến này trong trường hợp không thành công. | hmac.HMAC-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="HMAC Policy Errors"> <Step> <Name>AM-Unauthorized</Name> <Condition>(fault.name Matches "HmacVerificationFailed")</Condition> </Step> <Condition>hmac.HMAC-1.failed = true</Condition> </FaultRule> </FaultRules>