لینک امن (Secure Link) دسترسی به یک مسیر را به امضا و زمان انقضا گره میزند. بهجای اینکه URL یک فایل یا مسیر بدون محدودیت زمانی قابل استفاده باشد، اپلیکیشن برای آن یک توکن زماندار تولید میکند و لبه CDN اعتبار آن را بررسی میکند.
اگر توکن معتبر نباشد یا زمان انقضای آن گذشته باشد، درخواست با 403 Forbidden رد میشود.
لینک امن جایگزین احراز هویت کاربر یا فایروال نیست. فایروال قوانین عمومی روی ترافیک اعمال میکند، درحالیکه لینک امن برای یک فایل یا مسیر مشخص، یک دسترسی زماندار ایجاد میکند که اپلیکیشن صادر میکند و لبه آن را بررسی میکند.
flowchart LR app(["اپلیکیشن"]) client(["کلاینت"]) edge(["لبه CDN"]) upstream(["آپاستریم"]) app -->|"لینک با token و expire"| client client -->|"درخواست"| edge edge -->|"معتبر"| upstream edge -->|"نامعتبر یا منقضی"| client
دو لایه پیکربندی
تنظیمات لینک امن در دو لایه انجام میشود:
| لایه | نقش |
|---|---|
| صفحه لینک امن (CDN) | مدیریت Secretها، نام پارامترهای Query، محدوده اعتبار توکن و محدودیت IP |
| قانون مسیر | فعال یا غیرفعال کردن بررسی لینک امن برای همان مسیر |
بدون Secret و تنظیمات CDN، اپلیکیشن نمیتواند توکن مطابق سیاست لینک امن تولید کند. همچنین تا زمانی که لینک امن روی قانون مسیر فعال نباشد، لبه درخواستهای آن مسیر را بر اساس توکن محدود نمیکند؛ حتی اگر Secret تعریف شده باشد.
بنابراین معمولا لینک امن را فقط روی مسیرهای محافظتشده، مانند /videos/* یا /downloads/*، فعال میکنیم و مسیرهای عمومی مانند صفحه اصلی را بدون آن نگه میداریم.
Secret، Token و Expire
Secret رشتهای محرمانه است که برای تولید و بررسی توکن استفاده میشود. Secret باید فقط در اختیار اپلیکیشن صادرکننده لینک و CDN باشد.
Expire زمان انقضای لینک بهصورت Unix Timestamp برحسب ثانیه است. پس از این زمان، لینک حتی با توکن درست نیز معتبر نیست.
Token مقدار هششدهای است که از ترکیب پارامترهای مشخصشده توسط تنظیمات لینک امن تولید میشود. در حالت پایه، این ترکیب شامل مسیر، Secret و زمان انقضا است و در صورت فعال بودن محدودیت IP، IP کلاینت نیز به آن اضافه میشود.
اگر نام پارامترها را تغییر نداده باشیم، لینک به این شکل خواهد بود:
https://cdn.example.com/videos/episode-1.mp4?expire=1718851200&token=...جزییات فرمول تولید Token و گزینههای موثر بر آن در مرجع تنظیمات لینک امن آمده است.
مرز با قانون مسیر و کش
لینک امن روی یک قانون مسیر اعمال میشود؛ بنابراین ترتیب قوانین مسیر همچنان اهمیت دارد.
برای مثال، اگر قانون فراگیر /* بالاتر از /videos/* قرار گرفته باشد، درخواست ویدیو ممکن است با قانون اول منطبق شود و به قانون دارای لینک امن نرسد.
لینک امن محتوای پاسخ را تغییر نمیدهد و جایگزین کش نیست. پس از معتبر بودن Token، درخواست مطابق سایر تنظیمات همان قانون مسیر پردازش میشود؛ از جمله سیاست کش و آپاستریم.
