در پایان این راهنما، لینک امن را روی یک قانون مسیر فعال میکنیم تا فقط درخواستهایی با توکن معتبر و منقضینشده به محتوا دسترسی داشته باشند.
برای آشنایی با مفهوم و محدودیتهای لینک امن، لینک امن چیست؟ را مطالعه میکنیم. برای جزییات گزینهها و فرمول تولید توکن مرجع تنظیمات لینک امن را دنبال میکنیم.
پیشنیازها
- دامنه یا زیردامنه پشت CDN ستون — آموزشها
- دستکم یک قانون مسیر برای محتوای محافظتشده — هدایت درخواستها به آپاستریم با قوانین مسیر
مراحل
- در پنل، از سرویس توزیع محتوا وارد وبسایتها میشویم و وبسایت موردنظر را انتخاب میکنیم.
- بخش لینک امن را باز میکنیم و افزودن Secret جدید را کلیک میکنیم.
- روش ساخت تولید خودکار (پیشنهادی) را انتخاب میکنیم.
- ساخت Secret را کلیک میکنیم. مقدار Secret را از جدول لیست Secretها کپی میکنیم و در تنظیمات سمت سرور اپلیکیشن بهصورت امن نگهداری میکنیم.
امنیت Secret
Secret را در مرورگر، اپلیکیشن عمومی یا مخزن عمومی قرار نمیدهیم. هر کسی که به Secret دسترسی داشته باشد، میتواند برای محتوای محافظتشده توکن معتبر تولید کند.
- در همان صفحه لینک امن، تنظیمات را باز میکنیم.

- مقادیر پیشفرض نام پارامتر توکن و نام پارامتر انقضا پذیرفته و محدوده اعتبار توکن را قفل شدن به مسیر (ایمنتر) انتخاب میکنیم.
- تنظیمات را ذخیره را میکنیم.
- بخش قوانین مسیر (لوکیشن) را باز میکنیم و قانون مسیر محتوای محافظتشده را ویرایش میکنیم؛ برای مثال،
/videos/*. - در چه تنظیماتی بر روی مسیر بالا انجام شود؟ گزینه تنظیمات لینک امن را انتخاب میکنیم و فعال کردن لینک امن برای این مسیر را روشن میکنیم.
- ویرایش قانون مسیر را کلیک میکنیم.
مسیرهای عمومی
پس از فعال شدن لینک امن روی یک قانون مسیر، درخواست بدون
tokenوexpireمعتبر با403رد میشود. این تنظیم را روی مسیر فراگیری مانند/*فعال نمیکنیم، مگر اینکه کل آن مسیر باید محافظت شود.
- با استفاده از مسیر فایل (
path)، زمان انقضا (expire) با فرمت Unix Timestamp بر حسب ثاینه و Secret که از پنل کپی کردیم، توکن را به صورت زیر تولید میکنیم.
path = "/videos/premium/episode-1.mp4"
token = MD5(path + secret + expire)لینک نهایی:
https://[دامنه-CDN][path]?expire=[timestamp]&token=[token]نمونه ساخت لینک با Python:
from hashlib import md5
from time import time
secret = "your_secret_from_cdn_panel"
path = "/videos/premium/episode-1.mp4"
expire = int(time()) + 180
token = md5(f"{path}{secret}{expire}".encode("utf-8")).hexdigest()
url = f"https://cdn.example.com{path}?expire={expire}&token={token}"
print(url)حالتهای دیگر فرمول در مرجع تنظیمات لینک امن آمده است.
بررسی صحت
در دستورات زیر، example.com را با دامنه خود جایگزین میکنیم.
-
درخواست بدون امضا باید
403برگرداند:curl -i "https://example.com/videos/premium/episode-1.mp4" -
همان مسیر را با
expireوtokenساختهشده در اپلیکیشن درخواست میکنیم. اگر امضا و انقضا معتبر باشند، پاسخ نباید403باشد:curl -i "https://example.com/videos/premium/episode-1.mp4?expire=EXPIRE&token=TOKEN" -
در مشاهده لحظهای لاگ درخواستها، مقدار
locationرا بررسی میکنیم تا مسیر با قانون مسیر موردنظر مطابقت داشته باشد. درخواست بدون امضا بایدstatusبرابر403داشته باشد.
اگر لینک امضاشده نیز 403 است، موارد زیر را بررسی میکنیم:
- مسیر داخل هش دقیقا همان مسیر URI درخواست است، با
/شروع میشود و Query String ندارد. expireاز زمان فعلی بزرگتر است.- Secret همان مقدار جدول لیست Secretها است.
- نام پارامترهای Query با تنظیمات پنل یکسان است.
- اگر محدودیت IP روشن است، IP استفادهشده برای ساخت توکن با IP درخواست مطابقت دارد.
