Antipattern: زمان انقضا را برای توکن های OAuth تنظیم نکنید، Antipattern: زمان انقضا را برای نشانه های OAuth تنظیم نکنید

شما در حال مشاهده اسناد Apigee Edge هستید.
به مستندات Apigee X بروید .
اطلاعات

Apigee Edge چارچوب OAuth 2.0 را برای ایمن سازی API ها فراهم می کند. OAuth2 یکی از محبوب ترین طرح های احراز هویت و مجوز مبتنی بر توکن است. برنامه‌های سرویس گیرنده را قادر می‌سازد تا از طرف کاربران به API دسترسی داشته باشند بدون اینکه کاربران مجبور شوند نام کاربری و رمز عبور خود را فاش کنند.

Apigee Edge به توسعه‌دهندگان اجازه می‌دهد تا با اجرای هر یک از چهار نوع اعطای OAuth2 - اعتبار مشتری ، رمز عبور ، ضمنی و کد مجوز - با استفاده از خط‌مشی OAuthv2 ، توکن‌های دسترسی و/یا تازه‌سازی ایجاد کنند. برنامه های مشتری از نشانه های دسترسی برای مصرف API های امن استفاده می کنند. هر کد دسترسی زمان انقضای خاص خود را دارد که می تواند در خط مشی OAuthv2 تنظیم شود.

توکن‌های Refresh به صورت اختیاری همراه با توکن‌های دسترسی با برخی از انواع کمک‌ها صادر می‌شوند. توکن‌های Refresh برای به دست آوردن نشانه‌های دسترسی جدید و معتبر پس از منقضی شدن یا لغو شدن نشانه دسترسی اصلی استفاده می‌شوند. زمان انقضا برای نشانه‌های تازه‌سازی نیز می‌تواند در خط‌مشی OAuthv2 تنظیم شود.

این آنتی الگو مربوط به آنتی الگوی تنظیم زمان انقضای طولانی برای توکن های OAuth است.

ضد الگو

عدم تعیین زمان انقضا برای یک توکن به‌روزرسانی در خط‌مشی OAuthv2 منجر به انباشت توکن‌های OAuth و افزایش استفاده از فضای دیسک در گره‌های Cassandra می‌شود.

مثال زیر خط مشی OAuthV2 یک پیکربندی گمشده برای <RefreshTokenExpiresIn> را نشان می دهد:

<OAuthV2 name="GenerateAccessToken">
    <Operation>GenerateAccessToken</Operation>
    <ExpiresIn>1800000</ExpiresIn> <!-- 30 minutes -->
    <!--<RefreshTokenExpiresIn> is missing -->
    <SupportedGrantTypes>
      <GrantType>password</GrantType>
    </SupportedGrantTypes>
    <GenerateResponse enabled="true"/>
</OAuthV2>

در مثال بالا:

  • رمز دسترسی با زمان انقضای نسبتاً کم 30 دقیقه تنظیم شده است.
  • انقضای رمز تازه تنظیم نشده است.
  • نشانه Refresh برای همیشه در فروشگاه داده (Cassandra) باقی می ماند و باعث تجمع داده ها می شود.
  • یک نشانه رفرش که بدون انقضا ضرب شده است می تواند به طور نامحدود برای تولید توکن های دسترسی استفاده شود.
  • اگر ترافیک این API 10 درخواست در ثانیه باشد، می تواند تا 864000 توکن در روز ایجاد کند.

تاثیر

  • اگر توکن رفرش بدون انقضا ایجاد شود، دو پیامد عمده دارد:
    • نشانه Refresh را می توان در هر زمانی در آینده، احتمالاً برای سال ها، برای به دست آوردن یک نشانه دسترسی استفاده کرد. این می تواند پیامدهای امنیتی داشته باشد.
    • ردیفی در کاساندرا که حاوی نشانه رفرش است هرگز حذف نخواهد شد. این باعث می شود که داده ها در Cassandra جمع شوند.
  • اگر از نشانه رفرش برای به دست آوردن یک نشانه دسترسی جدید استفاده نکنید، بلکه در عوض یک نشانه تازه سازی و نشانه دسترسی ایجاد کنید، نشانه تازه سازی قدیمی تر در کاساندرا باقی می ماند. در نتیجه، توکن‌های تازه‌سازی در کاساندرا انباشته می‌شوند و به نفخ، افزایش استفاده از دیسک و فشرده‌سازی‌های سنگین‌تر می‌افزایند و در نهایت باعث تأخیر خواندن/نوشتن در کاساندرا می‌شوند.

بهترین تمرین

از یک زمان انقضای مناسب برای توکن‌های به‌روزرسانی و دسترسی استفاده کنید. بهترین روش را برای تنظیم زمان انقضای نشانه‌های به‌روزرسانی و دسترسی ببینید. مطمئن شوید که یک پیکربندی انقضا برای رمز دسترسی و بازخوانی در خط مشی مشخص شده است. برای جزئیات بیشتر در مورد پیکربندی خط مشی، به مستندات خط مشی OauthV2 مراجعه کنید.

بهترین شیوه ها به طور خاص برای Edge برای مشتریان خصوصی Cloud

این بخش بهترین شیوه ها را به طور خاص برای مشتریان Edge برای Private Cloud توصیف می کند.

انقضای توکن به‌روزرسانی پیش‌فرض را مشخص کنید

به‌طور پیش‌فرض، اگر انقضای نشانه‌ی تازه‌سازی در پیکربندی خط‌مشی مشخص نشده باشد، Edge یک توکن تازه‌سازی بدون انقضا ایجاد می‌کند. با روش زیر می توانید این رفتار را نادیده بگیرید:

  1. در یک گره پردازشگر پیام، فایل لغو پیکربندی $APIGEE_ROOT/customer/application/message-processor.properties ویرایش یا ایجاد کنید. مطمئن شوید که این فایل توسط کاربر apigee قابل خواندن است.
  2. خط زیر را به فایل اضافه کنید:
    conf_keymanagement_oauth_refresh_token_expiry_time_in_millis=3600000
    با این کار، انقضای نشانه به‌روزرسانی پیش‌فرض، در صورتی که هیچ کدام در یک خط‌مشی مشخص نشده باشد، روی ۱ ساعت تنظیم می‌شود. می توانید این مقدار پیش فرض را بر اساس نیازهای کسب و کار خود تغییر دهید.
  3. سرویس پردازشگر پیام را مجددا راه اندازی کنید:
    apigee-service edge-message-processor restart
  4. مراحل بالا را در تمام گره های پردازشگر پیام یک به یک تکرار کنید.

بهترین شیوه ها در کاساندرا

سعی کنید به آخرین نسخه Apigee که به صورت عمومی در دسترس است، ارتقا دهید. Apigee به انتشار اصلاحات و پیشرفت هایی ادامه می دهد که به بهبود و بهینه سازی مدیریت توکن ها در Apigee ادامه می دهد. در Apigee، توکن‌های دسترسی و تازه‌سازی در Cassandra در فضای کلید «kms» ذخیره می‌شوند. باید مطمئن شوید که استراتژی فشرده سازی این فضای کلیدی روی LeveledCompactionStrategy تنظیم شده است. باید بررسی کنید که شاخص های زیر وجود نداشته باشند:
  • kms.oauth_20_access_tokens.oauth_20_access_tokens_organization_name_idx #f0f0f0 و
  • kms.oauth_20_access_tokens.oauth_20_access_tokens_status_idx

همچنین می‌توانید gc_grace_seconds در جدول kms.oauth_20_access_tokens را از 10 روز پیش‌فرض به مقدار کمتر (مانند 3 روز) کاهش دهید تا مطمئن شوید سنگ قبرهای تولید شده به دلیل حذف نشانه‌ها سریع‌تر از ذخیره‌گاه داده پاک می‌شوند.

در ادامه مطلب