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

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

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

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

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

این ضدالگو به ضدالگوی تنظیم زمان انقضای طولانی برای توکن‌های OAuth مربوط می‌شود.

ضدالگو

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

مثال زیر از سیاست 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>

در مثال بالا:

  • توکن دسترسی با زمان انقضای نسبتاً پایین ۳۰ دقیقه تنظیم شده است.
  • انقضای توکن به‌روزرسانی تنظیم نشده است.
  • توکن Refresh برای همیشه در مخزن داده (کاساندرا) باقی می‌ماند و باعث انباشت داده‌ها می‌شود.
  • یک توکن تازه‌سازی که بدون تاریخ انقضا ضرب شده باشد، می‌تواند به طور نامحدود برای تولید توکن‌های دسترسی استفاده شود.
  • اگر ترافیک این API ده درخواست در ثانیه باشد، می‌تواند تا ۸۶۴۰۰۰ توکن در روز تولید کند.

تأثیر

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

بهترین روش

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

بهترین شیوه‌ها به طور خاص برای Edge برای مشتریان Private 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 از مقدار پیش‌فرض ۱۰ روز به مقدار کمتری (مانند ۳ روز) کاهش دهید تا مطمئن شوید که سنگ قبرهای ایجاد شده به دلیل حذف توکن‌ها سریع‌تر از مخزن داده‌ها پاک می‌شوند.

مطالعه بیشتر