+
+
۶.۱ — مدیریت صحیح Scopeها در سطح API Key
+
+ هنگام ساخت API Key، از مقادیر XApiKeyScope استفاده کنید:
+
+
+
+
+var result = await provider.CreateApiKey(
+ applicationId: applicationId,
+ scopes: new[] { "read", "write" },
+ allowedIPs: new[] { "192.168.1.100" },
+ rateLimit: 60,
+ expiration: TimeSpan.FromDays(30),
+ userInfo: userInfo
+);
+
+
+
۶.۲ — تفکیک Policyهای مبتنی بر API Key از Policyهای مبتنی بر Role
+
+ Policyهای موجود در XPolicies دو دسته هستند:
+
+
+ - Policyهای مبتنی بر Scope (مثل
ApiKeyAccess, ReadAccess) — برای API Key و Bearer Token
+ - Policyهای مبتنی بر Role (مثل
User, Admin) — فقط برای Bearer Token
+
+
+
+ ⚠️ توجه: هرگز از Policyهای Role-based برای Endpointهایی که قرار است با
+ API Key محافظت شوند استفاده نکنید. این Policyها انتظار Claim از نوع role دارند
+ که API Key ندارد.
+
+
+
۶.۳ — ذخیره امن Plain Key
+
+ کلید اصلی (plain key) فقط در لحظه ساخت برگردانده میشود. باید در جای امن ذخیره شود.
+ در صورتی که کاربر آن را گم کند، باید کلید قبلی revoke شده و کلید جدید ساخته شود.
+
+
+
۶.۴ — Rate Limit و Audit Log
+
+ در XApiKeyConfiguration، ویژگیهای زیر فعال هستند:
+
+
+ DefaultRateLimit — محدودیت نرخ پیشفرض
+ EnableAuditLog — برای ثبت استفاده از API Keyها
+
+
+
+ توصیه میشود در ValidateApiKey پس از اعتبارسنجی موفق، یک رکورد
+ XApiKeyUsage ثبت کنید تا تاریخچه استفاده قابل ردیابی باشد.
+
+
+
۶.۵ — Endpointهای توصیهشده برای تست
+
+ برای اطمینان از کارکرد صحیح، این Endpointها را در AccountController+Test.cs
+ اضافه کنید:
+
+
+
+[RequireXPowered]
+[HttpGet("Test/HiApiKeyReadAccess")]
+[Authorize(Policy = XPolicies.ApiKeyReadAccess)]
+public ActionResult<string> HiApiKeyReadAccess()
+{
+ return Ok("API Key Read Access Passed ...");
+}
+
+[RequireXPowered]
+[HttpPost("Test/HiApiKeyWriteAccess")]
+[Authorize(Policy = XPolicies.ApiKeyWriteAccess)]
+public ActionResult<string> HiApiKeyWriteAccess()
+{
+ return Ok("API Key Write Access Passed ...");
+}
+
+