الگوی بد: برای کد OAuth زمان انقضا تنظیم نکنید

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

‫Apigee Edge چارچوب OAuth 2.0 را برای ایمن کردن میاناهای برنامه‌سازی کاربردی ارائه می‌دهد. ‫OAuth2 یکی از محبوب‌ترین طرح‌های اصالت‌سنجی و صدور مجوز مبتنی بر کد و استاندارد باز است. این فناوری به برنامه‌های کارخواه امکان می‌دهد بدون نیاز به فاش کردن نام کاربری و گذرواژه کاربران، ازطرف آن‌ها به «میاناهای برنامه‌سازی کاربردی» دسترسی پیدا کنند.

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

کدهای بازآوری به‌صورت اختیاری همراه با کدهای دسترسی با برخی‌از انواع اعطا صادر می‌شوند. از نمودارهای بازآوری برای دریافت نمودارهای دسترسی جدید و معتبر پس‌از منقضی شدن یا فسخ شدن نمودار دسترسی اصلی استفاده می‌شود. زمان انقضای کد بازآوری را نیز می‌توان در خط‌مشی 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>

در مثال بالا:

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

تأثیر

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

روال مطلوب

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

روال‌های مطلوب ویژه مشتریان Edge for Private Cloud

این بخش روال‌های مطلوب را به‌طور خاص برای مشتریان «Edge برای 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. مراحل بالا را در همه گره‌های پردازشگر پیام یکی‌یکی تکرار کنید.

روال‌های مطلوب در Cassandra

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

مطالعه بیشتر