CSP Platform API

Authentication

Để đảm bảo tính bảo mật, cần phải xác thực trong mỗi yêu cầu. Và để hoàn tất việc xác thực cần có Session Key. Phần này giới thiệu cách tạo Session Key từ Access Token.

Bước 1. Tạo Access Token

  1. Từ menu, chọn Profile > Access Token

  2. Bấm vào nút "Add Token" ở góc trên bên phải màn hình. Trong popup xác nhận tạo token, chọn Yes.

  3. Hệ thống sẽ sinh ra Access Token gồm 2 thành phần: Public Key (có độ dài 32 byte) và Private Key (có độ dài 64 byte) - như hình dưới.

Lưu ý sau khi tạo: Do người dùng chỉ nhận được Private Key một lần duy nhất, vì vậy cần lưu trữ cẩn thận vì không thể lấy lại được sau khi tạo.

Bước 2. Sử dụng Access Token để Xác thực API

  1. Chuẩn bị thông tin cần thiết để tạo session key:

  • Timestamp: Thời gian request hiện tại (hợp lệ trong vòng 2 phút kể từ khi tạo) - ví dụ: 1709613882.

  • API URL: Đường dẫn API cần gọi (ví dụ: /api/analytics_data/get_all)

  • Token ID (Public Key): ID của Access Token (ví dụ: 12fe18b8-d8fd-4476-86eb-ae4d5bb73bd9).

  • Private Key: Khóa bí mật đã được lưu trữ ở bước 1 (ví dụ: FXjJuK1vecUR7FOTov3MQn7dqqfeKKJ1FXjJuK1vecUR7FOTov3MQn7dqqfeKKJ1)

  1. Tạo session authentication string (chuỗi xác thực) bằng cách ghép nối các thông tin theo dạng:

    keyId + "\$" + API URL + "\$" + Timestamp

    (*ví dụ*: 12fe18b8-d8fd-4476-86eb-ae4d5bb73bd9$/api/analytics_data/get_all$1709613882)

  2. Tạo Signature bằng cách sử dụng thuật toán EdDSA với Private Key để ký session authentication string vừa tạo.

  3. Gửi yêu cầu API với thông tin trong header:

  • Authorization: 'keyId + "$" + Signature'.

  • X-Auth-Datetime: 'Timestamp'.

Code Example

Python

import datetime
import requests
import nacl.bindings
import nacl.encoding
import nacl.signing

ACCESS_KEY_ID     = "<REPLACE-HERE>"
ACCESS_KEY_SECRET = "<REPLACE-HERE>"
URL               = "<REPLACE-HERE>"
SERVER_ADDRESS    = "<REPLACE-HERE>"

private_key_bytes = bytes.fromhex(ACCESS_KEY_SECRET)
seed = nacl.bindings.crypto_sign_ed25519_sk_to_seed(private_key_bytes)
signing_key_loaded = nacl.signing.SigningKey(seed)

timestamp = int(datetime.datetime.now().timestamp())
authString = f"{ACCESS_KEY_ID}${URL}${timestamp}"
signed_with_loaded = signing_key_loaded.sign(bytes(authString, 'utf-8'))

print (f"X-Auth-Datetime: {timestamp}")
print (f"Aurthorization: {ACCESS_KEY_ID}${signed_with_loaded.signature.hex()}")

parameters = {
}

headers = {
    "X-Auth-Datetime": str(timestamp),
    "Authorization": f"{ACCESS_KEY_ID}${signed_with_loaded.signature.hex()}"
}

data = {
    "action":"everything",
    "url":[]
}

response = requests.post(SERVER_ADDRESS + URL, headers=headers, json=data)
if response.status_code == 200:
    print(response.json())
else:
    print("Error: ", response.text)
    print("Error: ", response.status_code)

Danh Sách API Sử Dụng Access Token

Purge Cache

  • Address: https://api.security.cdn.cmccloud.com.vn/cdn

  • Method: POST

  • URL: /api/cdn/<SITE_ID>/caching_control/purge

  • Response Body

    • 200: Purge cache successfully

    • 400: missing some required header fields

    • 401: access token is invalid or expired

    • 403: you do not have permission

Purge everything

  • Request Body:

{
    "action":"everything",
    "url":[]
}

Custom Purge

  • Request Body:

{
    "action":"custom",
    "url":["/cat.jpg ","/cat.jpg "]
}

Last updated