پرش به مطلب اصلی

احراز هویت و API Key

نکات مهم

هشدار امنیتی
  • جهت کار با وب سرویس های مربوط به حساب کاربری، استفاده از API Key الزامی است
  • جهت ایجاد هر API Key به دلایل مسائل امنیتی وارد کردن حداقل یک IP آدرس الزامیست
  • هرگز API Key حساب کاربری خود را با دیگران به اشتراک نگذارید

برای دریافت API Key به این صفحه مراجعه کنید.

برای استفاده از ‌‌API های دارای امضا، نیازمند API KEY و SECRET میباشید که در بخش حساب کاربری میتوانید ایجاد نمایید. در Header های این درخواست ها باید کلید های مقابل اضافه شود.

امضاء درخواست ها

برای امضاء درخواست ها ابتدا باید تمام مشخصات درخواست را مشابه زیر در یک متن آماده کنید:

<method>\n<full_path>\n<timestamp>\n<data>

عنوانتوضیحات
methodمتد استفاده شده در زمان ارسال درخواست
full_pathمسیر درخواست داده شده به همراه آرگومان ها و بدون دامنه سایت
timestampتایم استمپ حال حاضر با منطقه زمانی UTC به میلی ثانیه
dataداده های json ارسالی در صورت وجود رمزنگاری شده به صورت base64
نکته

در صورت عدم وجود data باید متن را مشابه زیر درست کرد: <method>\n<full_path>\n<timestamp>

نمونه کد

import hmac
import hashlib
import datetime
import json
import base64

def create_signature(secret_key, full_path, request_method, request_data=None):
timestamp = int(datetime.datetime.utcnow().timestamp() * 1000)
msg = f'{request_method.upper()}\n{full_path}\n{timestamp}'

if request_data:
base64encode = base64.b64encode(json.dumps(request_data).encode()).decode()
msg += f'\n{base64encode}'

signed_key = hmac.new(
bytes(secret_key, "utf-8"),
msg=bytes(msg, "utf-8"),
digestmod=hashlib.sha256).hexdigest()

return signed_key, timestamp

# مثال استفاده
api_secret = "your-secret-key"
path = "/api/v1/test?example=sample"
method = "POST"
data = {"example": "sample"}

signature, timestamp = create_signature(api_secret, path, method, data)
print(f"Signature: {signature}")
print(f"Timestamp: {timestamp}")

مثال های عملی

با داده:

POST\n/api/v1/test?example=sample\n1689680240824\neyJleGFtcGxlIjoic2FtcGxlIn0=

بدون داده:

POST\n/api/v1/test?example=sample\n1689680240824

دستور OpenSSL:

echo -n "Your Generated Request Text" | openssl dgst -sha256 -hmac "Your SECRET key"