Thường thì request Rest API do một trang web cung cấp sẽ yêu cầu Authorize với HMAC.
·
Bảng giá trị của tham số $iAlgID:
Loại Algorithm
Giá trị
$CALG_AES_128
0x0000660e
$CALG_AES_192
0x0000660f
$CALG_AES_256
0x00006610
$CALG_MD5
0x00008003
$CALG_SHA1
0x00008004
$CALG_SHA_256
0x0000800c
$CALG_SHA_384
0x0000800d
$CALG_SHA_512
0x0000800e
Lưu ý: Các biến hằng số $CALG_SHA_256, $CALG_SHA_384, $CALG_SHA_512 không được định nghĩa trong thư viện Crypt.au3 nên ta cần tự khai báo hoặc điền thẳng giá trị của nó vào tham số $iAlgID.
* Ví dụ
Ví dụ là REST API của trang adf.ly (trang nhúng quảng cáo này hẳn ai cũng biết), phần HMAC Authentication, được trang này giải thích như sau:
Public Key/Secret Key and HMAC authentication is designed for API endpoints which provides ability to Create / Read / Update / Delete information accessible only to account holder.
You should do following in order to access such API endpoints:
1. Before making the REST API call, combine all the parameters and values you intend on sending. Append your UserId (_user_id), Public API Key (_api_key). In order to prevent replay attacks you must include a current Unix timestamp (http://en.wikipedia.org/wiki/Unix_time) using UTC time (_timestamp) to this parameters list. Optionally include _page parameter for data pagination.
Sort the query string parameters using byte ordering, so parameter name 'param[10]' comes before 'param[2]'.
3. Hash (SHA256) the URL_encoded query string from Step #2 with your Private Key assigned to you by the system.
4. Append computed hash value to request parameters scope with _hash parameter name and send all parameters to server in format which corresponds to the type of HTTP request.
Parameters order does not matter.
Phân tích:
Khi ta đăng ký adf.ly và vào trang REST API của nó thì ta sẽ nhận được 3 thông số tài khoản: User-ID, Public-Key (API-Key) và Secret-Key (Private-Key). Ví dụ ta nhận được User-ID = 123, Public-Key = ABC và Secret-Key = XYZ.
1. Xây dựng tham số $sString:
o
_user_id và _api_key : Đã sẵn sàng được cung cấp.
o
_timestamp : nó giải thích là a current Unix timestamp nên ta dùng hàm _TimeStampUNIX.