۶.۱ — مدیریت صحیح 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 ...");
}